質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

1回答

6044閲覧

ActiveRecord::NotNullViolation in Devise::RegistrationsController#create

退会済みユーザー

退会済みユーザー

総合スコア0

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

1グッド

0クリップ

投稿2020/03/14 03:54

編集2022/01/12 10:55

ログイン機能と新規登録機能をdeviseで導入していざ、新規登録を行おうとしたら以下のようなエラーが表示されます。ActiveRecord::NotNullViolation in Devise::RegistrationsController#create
おそらくusernameというカラムがdefaultで存在しないために起きているエラーだと思われるのですが、これはどのファイルをどのように修正すればよいでしょうか?
イメージ説明
ログイン時のview

.log .login %h2.login-header aaaaa = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| .field -# = f.label :ユーザ名 %br/ = f.email_field :email, autofocus: true, autocomplete: "email",placeholder: "メールアドレス" .field -# = f.label :password %br/ = f.password_field :password, autocomplete: "current-password",placeholder: "パスワード" - if devise_mapping.rememberable? .field = f.check_box :remember_me = f.label :remember_me .actions = f.submit "ログイン" = render "devise/shared/links"

新規登録時のview

.newreg .newregstr %h2.sign-up Kstagram %h5 新しいアカウント作成 = form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| = render "devise/shared/error_messages", resource: resource .field -# = f.label :email %br/ = f.email_field :email, autofocus: true, autocomplete: "email",placeholder: "メールアドレス" .field -# = f.label :password - if @minimum_password_length %em (#{@minimum_password_length} characters minimum) %br/ = f.password_field :password, autocomplete: "new-password",placeholder: "パスワード" .field -# = f.label :password_confirmation %br/ = f.password_field :password_confirmation, autocomplete: "new-password",placeholder: "パスワード確認" .actions = f.submit "Sign up" = render "devise/shared/links"

マイグレーションファイル

# frozen_string_literal: true class DeviseCreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| ## Database authenticatable # t.string :username, null: false t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.text :profile ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable # t.integer :sign_in_count, default: 0, null: false # t.datetime :current_sign_in_at # t.datetime :last_sign_in_at # t.string :current_sign_in_ip # t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end # add_index :users, :username, unique: true add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end

モデル

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable # validates :username, presence: true #追記 # validates :profile, length: { maximum: 200 } #追記 end
s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2020/03/14 04:01

新規登録のviewと resistrationのコントローラーを載せてください
退会済みユーザー

退会済みユーザー

2020/03/14 04:08

resistrationのコントローラーってどこにあるのですか?
退会済みユーザー

退会済みユーザー

2020/03/14 04:13

今までのログイン機能ではregistrationコントローラーというファイルを作成せずに行なっていました
guest

回答1

0

エラーからみて、User に username があると思います。
migration のUserを作っているfileを確認してください。

そこで、usernameは必須と宣言していると思われます。

しかし、登録のviewにはusernameの項目がないので nil で登録されようとし、そのエラーとなりました。
なお
DEVISEをつかうと、そちらでdefaultのcontrollerは
用意してくれます。
その中では username をDBにしまうということは書かれていないので、ここも直さないと同じエラーとなります

ということで、username が必要か否かでこの後が変わります。
必要ですか?

追記
Userでusernameが用意されています。かつ null false で必須になっています。
しかし新規登録時のviewにはusernameの欄がありません。

ここにusernameを追加し、かつ
このあたりを参考にしてください

投稿2020/03/14 04:56

編集2020/03/14 08:34
winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/14 04:58

はい、ユーザー名を使ってプロフィール画面を作りたかったので必要です。
winterboum

2020/03/14 04:59

migration、 models/user.rb を見せてください
退会済みユーザー

退会済みユーザー

2020/03/14 05:16

はい、追加しました
winterboum

2020/03/14 05:57 編集

あああ、、、 注意しわすれてました。 codeは画像貼り付けではなくて <code> を使ってtext貼付けしてください。 migration頭の方見えないし .
退会済みユーザー

退会済みユーザー

2020/03/14 06:04

マイグレーションファイル編集しました。text貼り付けですね。次から気をつけます
winterboum

2020/03/14 06:06 編集

いまから直して欲しい。。。。 コピペ出来ないから、コメントとか回答とかめんどう
退会済みユーザー

退会済みユーザー

2020/03/14 13:26

コード直しました
winterboum

2020/03/14 21:09

回答に追記してあります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問