###■環境
・Windows10(64bit)
・Ruby 2.7.4
・Rails 5.2.6
・devise 4.8.0
###■Railsのビューでエラーが表示されない
####状況
Railsアプリケーションにgem「devise」をインストールし、ビューは「users」ディレクトリ内に格納するようにした。
(デフォルトの app\views\devise ではなく app\views\users に)
そして、ビューのフォームを「form_for」から「form_with」に書き換えるなどカスタマイズした後から、ユーザ情報更新時などにビューでエラーメッセージが何も表示されなくなった。
####原因
1)「form_with」内に「local: true」を追加していなかった。
2)renderメソッドでのリソース指定を修正していなかった。
####対処
1)local: trueの追加
#修正前
<%= form_with(model: resource, scope: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
#修正後
<%= form_with(model: resource, scope: resource_name, url: registration_path(resource_name), html: { method: :put }, local: true) do |f| %>
2)リソース指定の修正(resource: → model:)
#修正前
<%= render "users/shared/error_messages", resource: resource %>
#修正後
<%= render "users/shared/error_messages", model: resource %>
####参考情報
【Rails】form_with/form_forについて【入門】
【Rails 5】(新) form_with と (旧) form_tag, form_for の違い
【Rails】deviseのビューのform_forをform_withに置き換える
###■ビューのレイアウトがエラー発生項目だけ崩れる
####状況
ユーザ情報更新画面には名前・emailアドレス・パスワードなどの入力フォームがある。そして、パスワードを要件を満たさずに設定しようとすると、ビューにエラーメッセージ自体は正常に表示される。
しかし、パスワード欄だけ入力フォームのレイアウトが崩れる。
####原因
ビューのエラーメッセージ箇所に、クラス「field_with_errors」のdivタグが自動挿入されている。
####対処
クラス「field_with_errors」へのスタイル適用
CSSでクラス「field_with_errors」を定義すればよい。
以下はSCSSを利用している場合の対処例。
.field_with_errors {
display: contents;
}
####参考情報
Railsのエラーメッセージでフォームのレイアウトが崩れる