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

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

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

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

Q&A

解決済

1回答

718閲覧

ユーザーの新規登録ができない

hanahana1

総合スコア3

Ruby

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

0グッド

0クリップ

投稿2023/01/26 07:48

編集2023/01/27 15:40

前提

rubyでユーザー管理機能を実装中ですが、新規登録機能でエラーが生じています。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 新規登録画面のフォームを入力後、登録完了してテーブルに情報が反映されること。

発生している問題・エラーメッセージ

フォームに情報を入力すると、登録が完了?してログイン画面に遷移してしまうこと。
上記で入力した情報はテーブルに保存されていないこと。

エラーメッセージ Processing by Devise::SessionsController#create as HTML Parameters: {"authenticity_token"=>"qukImB+eeKK+RNTkvM6OqcfFjym/7zL0TtlfHV7V+ILMAsaFynNlRw4LJ7yuDdzljbM74ijyR1b8fa7CYgXNCQ==", "user"=>{"nickname"=>"hana", "last_name"=>"佐藤", "first_name"=>"花子", "email"=>"hana@hana", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"登録する"} From: /Users/ユーザー名/projects/tsunagu/app/controllers/application_controller.rb:6 ApplicationController#configure_permitted_parameters: 5: def configure_permitted_parameters => 6: binding.pry 7: devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :last_name, :first_name, :email, :encrypted_password]) 8: end [1] pry(#<Devise::SessionsController>)> params => <ActionController::Parameters {"authenticity_token"=>"qukImB+eeKK+RNTkvM6OqcfFjym/7zL0TtlfHV7V+ILMAsaFynNlRw4LJ7yuDdzljbM74ijyR1b8fa7CYgXNCQ==", "user"=>{"nickname"=>"hana", "last_name"=>"佐藤", "first_name"=>"花子", "email"=>"hana@hana", "password"=>"hana111", "password_confirmation"=>"hana111"}, "commit"=>"登録する", "controller"=>"devise/sessions", "action"=>"create"} permitted: false> [2] pry(#<Devise::SessionsController>)> exit User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'hana@hana' ORDER BY `users`.`id` ASC LIMIT 1 Completed 401 Unauthorized in 24577ms (ActiveRecord: 8.6ms | Allocations: 584585) Processing by Devise::SessionsController#new as HTML Parameters: {"authenticity_token"=>"qukImB+eeKK+RNTkvM6OqcfFjym/7zL0TtlfHV7V+ILMAsaFynNlRw4LJ7yuDdzljbM74ijyR1b8fa7CYgXNCQ==", "user"=>{"nickname"=>"hana", "last_name"=>"佐藤", "first_name"=>"花子", "email"=>"hana@hana", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"登録する"} From: /Users/ユーザー名/projects/tsunagu/app/controllers/application_controller.rb:6 ApplicationController#configure_permitted_parameters: 5: def configure_permitted_parameters => 6: devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :last_name, :first_name, :email, :encrypted_password]) 7: end [1] pry(#<Devise::SessionsController>)> exit Unpermitted parameters: :nickname, :last_name, :first_name, :password_confirmation Rendering devise/sessions/new.html.erb within layouts/application Rendered devise/shared/_error_messages.html.erb (Duration: 0.1ms | Allocations: 15) Rendered devise/sessions/new.html.erb within layouts/application (Duration: 10.6ms | Allocations: 7418) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 5598ms (Views: 24.1ms | ActiveRecord: 0.0ms | Allocations: 164822)

該当のソースコード

application_controller.rb

1class ApplicationController < ActionController::Base 2 before_action :configure_permitted_parameters, if: :devise_controller? 3 4 private 5 def configure_permitted_parameters 6 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :last_name, :first_name, :email, :encrypted_password]) 7 end 8end

models/user.rb

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 5 devise :database_authenticatable, :registerable, 6 :recoverable, :rememberable, :validatable 7 8 validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i } 9 validates :nickname, presence: true 10 validates :first_name, presence: true, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]+\z/ } 11 validates :last_name, presence: true, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]+\z/ } 12end

db/migrate/devise_create_users

1class DeviseCreateUsers < ActiveRecord::Migration[6.0] 2 def change 3 create_table :users do |t| 4 ## Database authenticatable 5 t.string :email, null: false, default: "" 6 t.string :encrypted_password, null: false, default: "" 7 t.string :nickname, null: false 8 t.string :last_name, null: false 9 t.string :first_name, null: false 10 t.boolean :admin, default: false 11 12 ## Recoverable 13 t.string :reset_password_token 14 t.datetime :reset_password_sent_at 15 16 ## Rememberable 17 t.datetime :remember_created_at 18 19 ## Trackable 20 # t.integer :sign_in_count, default: 0, null: false 21 # t.datetime :current_sign_in_at 22 # t.datetime :last_sign_in_at 23 # t.string :current_sign_in_ip 24 # t.string :last_sign_in_ip 25 26 ## Confirmable 27 # t.string :confirmation_token 28 # t.datetime :confirmed_at 29 # t.datetime :confirmation_sent_at 30 # t.string :unconfirmed_email # Only if using reconfirmable 31 32 ## Lockable 33 # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 34 # t.string :unlock_token # Only if unlock strategy is :email or :both 35 # t.datetime :locked_at 36 37 38 t.timestamps null: false 39 end 40 41 add_index :users, :email, unique: true 42 add_index :users, :reset_password_token, unique: true 43 # add_index :users, :confirmation_token, unique: true 44 # add_index :users, :unlock_token, unique: true 45 end 46end

app/views/devise/registrations/new.html.erb

1<div class= "registration_wrapper"> 2 <h1 class= "logo">TSUNAGU</h1> 3 4 <div class= "form_box"> 5 <h2 class= "registration_title">新規登録</h2> 6 7 <%= form_with model: @user, url: user_session_path, id: 'new_user', class: 'new_user', local: true do |f| %> 8 <%= render "devise/shared/error_messages", resource: resource %> 9 10 <div class="field"> 11 <%= f.label :ニックネーム %><br /> 12 <%= f.text_field :nickname, autofocus: true %> 13 </div> 14 15 <div class="field"> 16 <%= f.label :姓 %><br /> 17 <%= f.text_field :last_name, placeholder:"例) 山田", autofocus: true %><br /> 18 </div> 19 20 <div class="field"> 21 <%= f.label :名 %><br /> 22 <%= f.text_field :first_name, placeholder:"例) 太郎", autofocus: true %><br /> 23 </div> 24 25 <div class="field"> 26 <%= f.label :メールアドレス %><br /> 27 <%= f.email_field :email, autofocus: true, autocomplete: "email" %> 28 </div> 29 30 <div class="field"> 31 <%= f.label :password %> 32 <% if @minimum_password_length %> 33 <em>(<%= @minimum_password_length %> 文字以上)</em> 34 <% end %><br /> 35 <%= f.password_field :password, autocomplete: "new-password" %> 36 </div> 37 38 <div class="field"> 39 <%= f.label :password_confirmation %><br /> 40 <%= f.password_field :password_confirmation, autocomplete: "new-password" %> 41 </div> 42 43 <div class="registration_button"> 44 <%= f.submit "登録する", class: "registration_blue_button" %> 45 </div> 46 <% end %> 47 </div> 48</div>

試したこと

binding.pryで、フォームから情報が送られているかどうか確認したところ、ターミナル(エラーメッセージで記述した内容)で情報が確認できました。
ログイン画面ではメールアドレスとパスワード、
新規登録画面では上記+ニックネーム+姓+名の情報が必要な設定にしています。

Unpermitted parameters: :nickname, :last_name, :first_name, :password_confirmation
というエラー内容と、
Rendering devise/sessions/new.html.erb within layouts/application
という内容から、新規登録画面で入力した情報を、ログイン画面情報として認識しているから?と考えましたが、解決策がわからず質問させていただきました。
以上、アドバイスを頂けますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

新規登録ならフォームの送信先は user_session_path ではなく new_user_registration_path とかではないですか
具体的には今のルーティングを確認してください

投稿2023/01/27 02:15

yuma.inaura

総合スコア1451

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

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

hanahana1

2023/01/27 06:40

ご回答いただきありがとうございます。 おっしゃる通り、app/views/registrations.new.html.erbを確認したところ、フォームの送信先がuser_session_pathになっておりました。 新規登録ボタンのリンクのパスのみ確認して、見落としていたようです。 大変助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問