ユーザー登録画面で、バリデーションエラーになったとき、画像のようにエラーメッセージをinputタグの下に表示させるためにフォーム作成時のビューヘルパーの引数に builder: FormHelper::FormWithErrorMessageBuilder
を設定したのですが読み込まれません。
(/helpersディレクトリ配下に、form_helper.r
というファイルをつくり、ActionView::Helpers::FormBuilder
クラスを継承したモジュールを作成しました。このファイルはGUIで直接作成したのですがこれがいけなかった...?)
エラー文は以下の通りです。
error
1uninitialized constant ActionView::Helpers::FormHelper::FormWithErrorMessageBuilder
new.html.erb
ruby
1<%= form_with(model: @user, builder: FormHelper::FormWithErrorMessageBuilder, local: true) do |f| %> 2 <div class="uk-margin"> 3 <%= f.label :ニックネーム, class: "uk-form-label" %> 4 <div class="uk-form-controls"> 5 <%= f.text_field :nickname, class: "uk-input" %> 6 </div> 7 </div> 8 (中略) 9 <% end %>
/helpers/form_helper
ruby
1module FormHelper 2 class FormWithErrorMessageBuilder < ActionView::Helpers::FormBuilder 3 def input_field_with_error(attribute, options={}, &block) 4 # 入力フォームと同じ属性のエラーメッセージを取得する 5 error_messages = @object.errors.full_messages_for(attribute) 6 7 # エラーがある場合のみ、エラー用のHTMLにする 8 if error_messages.any? 9 options[:class] << "input-with-error" 10 error_contents = create_error_div(attribute, error_messages) 11 end 12 13 # 従来の入力フォーム と 生成されたエラーメッセージ を連結して返す 14 block.call + error_contents || "" 15 end 16 17 # エラーメッセージのHTMLタグを作成する 18 def create_error_div(attribute, messages) 19 # content_tag でHTMLタグを生成 20 @template.content_tag(:div, class: "input-with-error") do 21 messages.each do |message| 22 @template.concat(@template.content_tag(:div, message)) 23 end 24 end 25 end 26 27 # 既存のビューヘルパーメソッドをオーバーライドする 28 def text_field(attribute, options={}) 29 input_field_with_error(attribute, options) do 30 super 31 end 32 end 33 def email_field(attribute, options={}) 34 input_field_with_error(attribute, options) do 35 super 36 end 37 end 38 def password_field(attribute, options={}) 39 input_field_with_error(attribute, options) do 40 super 41 end 42 end 43 end 44end
##試したこと
:builer => FormHelper::FormWithErrorMessageBuilder
にしたり()を消してみたり書き方を色々変えてみましたがダメでした。
情報が少なく色々と調べましたが解答が得られませんでした。
ご教授いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/28 15:43