railsのformでvalidationを設定し、引っかかった場合にメッセージを出すようにしたい。これを文言をカスタマイズして「、」区切りで出せるようにする。
バリデーションエラー文言の出し方
まずバリデーションエラー文言の出し方は下記になる。
- modelもしくはlocalesにvalidation文言設定
- flash[:alert]にエラー文言を入れる
- viewをレンダリングして文言表示
モデル内でのバリデーション設定
class Hoge < ApplicationRecord
validates :email, presence: true
end
上記のようにまずはvalidationをmodelに設定。メッセージをmodelに各方法もあるが、今回はlocalesに設定。
localesに文言設定
config/locales/ja.yml
ファイル
ja:
activerecord:
errors:
format: "%{message}"
models:
provider_user_application:
attributes:
email:
blank: "emailを入力してください"
name:
blank: "氏名を入力してください"
too_long: "氏名は50文字以下で入力してください"
controllerにエラーメッセージ
def create
@hoge = Hoge.new(hoge_params)
if @provider_user_application.save
flash[:notice] = '応募が完了しました'
redirect_to "/thanks"
else
flash[:alert] = @hoge.errors.full_messages.join(', ')
redirect_back(fallback_location: root_path)
end
end
redirect_back(fallback_location: root_path)で保存がうまくいかないときに再度レンダリングする。renderなどでもいいが複数ページにformを共通化して置きたい場合などどこにおいても大丈夫なようにredirect_back(fallback_location: root_path)で実装している。
デフォルトだと[“Emailemailを入力してください”, “Name氏名を入力してください”]のように配列に
デフォルトだと配列での表示になるため
flash[:alert] = @hoge.errors.full_messages.join(', ')
joinで「、」区切りで表示。