前提・実現したいこと
Railsでアプリを開発中、deviseを使ったユーザーの新規登録ができなくなったので解決したいです。
・アプリの開発当初にdeviseを導入したときは新規登録ができていました。
・いくつかの機能を実装したあと新規登録をしたら、ユーザー情報が保存されず、不具合に気づいたという状態です。
・devise導入時に登録したユーザー情報でのログインとログアウトは正常に動きます。
発生している問題・エラーメッセージ
新規登録ボタンを押したときのターミナルの表示。
・paramsには必要な情報が入っているのは確認しました
・最後の行にCompleted 200とありますが、DBには登録されていません
・登録実行後は、フォームが空になった状態で、再び新規登録画面が表示されます
・関係性があるのか分かりませんが、仮に空白のまま登録を実行してもエラーメッセージが出ません(ログイン画面では不備があるとエラーメッセージがちゃんと出ます・・・)
bash
1Started GET "/users/sign_up?authenticity_token=N2VDmmeLcnBlG2hasNQHZBW2zxChfMTvGcGhWwUhJne%2BLFaV9FeRVtunAIDhliyNRGvRFSTux6B2if5%2FVNomUw%3D%3D&user%5Bnickname%5D=%E3%83%86%E3%82%B9%E3%83%88%E6%AC%A1%E9%83%8E&user%5Bemail%5D=test2%40test.com&user%5Bpassword%5D=[FILTERED]&user%5Bpassword_confirmation%5D=[FILTERED]&commit=%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E7%99%BB%E9%8C%B2" for ::1 at 2021-08-20 16:19:30 +0900 2Processing by Devise::RegistrationsController#new as HTML 3 Parameters: {"authenticity_token"=>"N2VDmmeLcnBlG2hasNQHZBW2zxChfMTvGcGhWwUhJne+LFaV9FeRVtunAIDhliyNRGvRFSTux6B2if5/VNomUw==", "user"=>{"nickname"=>"テスト次郎", "email"=>"test2@test.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"アカウント登録"} 4 Rendering devise/registrations/new.html.erb within layouts/application 5 Rendered devise/shared/_links.html.erb (Duration: 0.3ms | Allocations: 108) 6 Rendered devise/registrations/new.html.erb within layouts/application (Duration: 3.8ms | Allocations: 1290) 7[Webpacker] Everything's up-to-date. Nothing to do 8Completed 200 OK in 26ms (Views: 24.7ms | ActiveRecord: 0.0ms | Allocations: 5183)
該当のソースコード
deviseの新規登録画面のビューです。
デフォルトから変更したのは、
・ニックネームカラムを追加している(ただし導入時から追加していて、そのときは正常に登録ができていた)
・bootstrapをdeviseにも導入している(ここが怪しいのかなと思いますが、理由を特定できていません)
views/devise/registrations.html.erb
ruby
1<form> 2<div class="col-7 m-auto devise_doby"> 3 <h3 class="title"><%= t('.sign_up') %></h3> 4 5 <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 6 <%= bootstrap_devise_error_messages! %> 7 8 <div class="form-group"> 9 <%= f.label :ニックネーム %> 10 <%= f.text_field :nickname, autofocus: true, autocomplete: 'nickname', class: 'form-control' %> 11 </div> 12 13 <div class="form-group"> 14 <%= f.label :email %> 15 <%= f.email_field :email, autocomplete: 'email', class: 'form-control' %> 16 </div> 17 18 <div class="form-group"> 19 <%= f.label :password %> 20 <%= f.password_field :password, autocomplete: 'current-password', class: 'form-control' %> 21 22 <% if @minimum_password_length %> 23 <small class="form-text text-muted"><%= t('devise.shared.minimum_password_length', count: @minimum_password_length) %></small> 24 <% end %> 25 </div> 26 27 <div class="form-group"> 28 <%= f.label :password_confirmation %> 29 <%= f.password_field :password_confirmation, autocomplete: 'current-password', class: 'form-control' %> 30 </div> 31 32 <div class="form-group"> 33 <%= f.submit t('.sign_up'), class: 'btn btn-primary' %> 34 </div> 35 <% end %> 36 <%= render 'devise/shared/links' %> 37 <%= link_to "トップページへ戻る", root_path, class: "text-blue" %> 38</div> 39</form>
参考:新規登録画面
下記のフォームを埋めて登録ボタンを押しても、空のフォームになった新規登録画面が表示されます。
deviseの不具合に直面したことがなく、またエラー画面が出る訳でもないので、どう修正すれば良いのか分からず戸惑っています・・・
ヒントでも構いませんのでご意見をいただけたら幸いです。
追記1:ApplicationController
ruby
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]) 7 end 8end
追記2:userモデル
本アプリでは同期通信のいいね機能が実装されています。
パスワードのバリデーションに関しては、devise導入時から記述していて、やはりその時は正常に処理されていました。
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 validates :nickname, presence: true 8 # passwordは半角英数字のバリデーション 9 validates :encrypted_password, :password, :password_confirmation, format: { with: /(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]/ } 10 11 has_many :events, through: :reaction_likes 12 has_many :reaction_likes, dependent: :destroy 13 # ユーザーがどの番組に「いいねをした」かを取得する 14 has_many :reaction_liked_events, through: :reaction_likes, source: :event 15 16 # ユーザーがすでにいいねをしているかどうかの判定をする。 17 def already_reaction_liked?(event) 18 self.reaction_likes.exists?(event_id: event.id) 19 end 20end
回答1件
あなたの回答
tips
プレビュー