Closed CarbazochromeT closed 11 months ago
Processing by UserSessionsController#new as HTML とあることからUserSessionsControllerのnewアクションが動いていることがわかります
user_sessions_contoroller.rbのnewアクションはは以下のようになっています
class UserSessionsController < ApplicationController
skip_before_action :require_login, only: %i[new create]
def new
end
end
error表示用のパーシャルにobjectを渡している箇所は
<%= render 'shared/error_messages', object: f.object %>
と書いてあるのでform_withにmodelオプションで渡しているインスタンスがobjectに渡されることになります
modelオプションで渡している@userはnewアクションで定義されているか確認してみてください
また、ログイン時にUserモデルのバリデーションエラーを表示させる必要があるかどうかも考えてみてください
<% if object.errors.any? %>
<div id="error_messages", class="flash flash-danger" >
<ul class="error-message">
<% user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<% object.errors.full_messages.each do |message| %>
に訂正したらmethodエラーメッセージはなくなりました。ありがとうございます。
言われてみればログインページにバリデーションエラーが表示されなくてもいいことに気がつきましたので削除いたしました。
今現在は、新規登録ページのバリデーションエラーと、ログイン失敗時の「ログインに失敗しました」の文字が出てこない状態です。
今現在は、新規登録ページのバリデーションエラーと、ログイン失敗時の「ログインに失敗しました」の文字が出てこない状態です。
こちらご自身でなにか調べたものがありましたら共有していただきたいです
記述しそびれておりました、申し訳ございません。 コントローラー内の記述を下記のように訂正したところ、エラーメッセージが表示されるようになりました。
def create
@user = User.new(user_params)
if @user.save
redirect_to login_path, flash:{ success: t('.success' )}
else
flash.now[:danger] = t('.fail')
render :new, status: :unprocessable_entity
end
end
どうやらRails7でバリデーションエラーを表示するにはstatus: :unprocessable_entity
という記述を行う必要があるみたいです。
ありがとうございました。
質問内容・実現したいこと
現在、Rails 7とSorceryを使用してログイン機能を実装しようとしています。 ログインページにて、Rails基礎編で出てきた課題10のフォーム入力の個別エラーを表示させたいのですが、objectの中身がnilになってしまいエラーが発生してしまいます。 詰まってしまっているので、アドバイス等いただけますと幸いです。
現状発生している問題・エラーメッセージ
該当のソースコード
エラーから考えられる原因
user_session/new.html.erb
のページを開いた時点、つまりフォームに@userの情報を入力する前からエラーになってしまいます。 別の箇所に記述を変えた方がいいのでしょうか。試したこと
objectの記述を@object、@userに変更してみましたが、やはりobjectの中身はnilになってしまいます。
参考にしたURL
https://school.runteq.jp/v2/questions/2738 https://teratail.com/questions/278602