Validateのメッセージをテキストボックスのすぐ側に表示したい
標準だとエラーメッセージは指定した場所にしか入り込んでくれない。
<%= error_messages_for(:hoge) -%>
入力値が多くなると「どこに問題があるんだ?」ってなる。自分がそうなった。
参考
- ruby/rails/RailsGuidesをゆっくり和訳してみたよ/Active Record Validations and Callbacks 8.3 エラーメッセージのHTMLのカスタマイズ(Customizing the Error Messages HTML)
- [http://qiita.com/items/66cee18b2b458b005ffa:title=railsのValidationでがぶっ込まれてスタイルが崩れたら]
hoge/config/application.rbに追記
# カスタムバリデートメッセージ config.action_view.field_error_proc = Proc.new { |html_tag, instance| if instance.error_message.kind_of?(Array) %(<span class='field_with_errors'>#{html_tag}</span><span class="validation-error"> #{instance.error_message.join(',')}</span>).html_safe else %(<span class='field_with_errors'>#{html_tag}</span><span class="validation-error"> #{instance.error_message}</span>).html_safe end }
するってーと、フォームのフィールドの後ろにエラーメッセージが表示されるようになる。うん。ただ、エラーメッセージの日本語化を済ましていると「を入力してください」と変なことになるので、ja.ymlも改造
hoge/config/locales/ja.yml
errors: &errors format: ! '%{attribute} : %{message}' messages: accepted: 受諾してください。 blank: 入力してください。 省略
formatに「:」を追加、文頭の「を」「は」を取り除く