質問: ### 前提・実現したいこと 前回に引き続き、railsのバリデーションエラーメッセージについてです。 ・エラーメッセージを出す時に、先頭につくニックネームやメールアドレスといったカラム名を表示させないようにしたい ・全てのエラーで非表示にせず、エラー内容によっては先頭のカラム名は表示させる。 ・カラムによっては表示内容を変える ### 発生している問題・エラーメッセージ ・ユーザーのニックネームを「wat」と入力して「taken」のエラーで引っかかった時に、「ニックネームこのwatはすでに存在します」 となるので先頭の「ニックネーム」の部分を表示させないようにしたいです。 ・また、takenのエラーの時に「ニックネーム」を表示させずに、blankの時は「ニックネームを入力してください」というようにしたいです。 ・さらに、同じtakenのエラーでも、ニックネームの時は%{value}、メールアドレスの時は%{attribute}をメッセージ内に組み込みたいです。 ### 該当のソースコード ja.yml ``` ja: activerecord: models: user: ユーザー attributes: user: nickname: ニックネーム email: メールアドレス password: パスワード password_confirmation: 再入力 errors: messages: format: "%{message}" accepted: を受諾してください blank: を入力してください confirmation: と%{attribute}が一致しません empty: を入力してください equal_to: は%{count}にしてください even: は偶数にしてください exclusion: は予約されています greater_than: は%{count}より大きい値にしてください greater_than_or_equal_to: は%{count}以上の値にしてください inclusion: は一覧にありません invalid: は不正な値です less_than: は%{count}より小さい値にしてください less_than_or_equal_to: は%{count}以下の値にしてください model_invalid: 'バリデーションに失敗しました: %{errors}' not_a_number: は数値で入力してください not_an_integer: は整数で入力してください odd: は奇数にしてください other_than: は%{count}以外の値にしてください present: は入力しないでください required: を入力してください taken: この%{value}はすでに存在します # taken: この%{attribute}はすでに存在します too_long: は%{count}文字以内で入力してください too_short: は%{count}文字以上で入力してください wrong_length: は%{count}文字で入力してください ``` ビュー ``` - if resource.errors.any? %ul - resource.errors.full_messages_for(:nickname).each do |message| %li= message ``` ### 試したこと ja.ymlに format: "%{message}" を追加しても直りませんでした。 ### 補足情報(FW/ツールのバージョンなど) rails(5.2.3)
回答: 『先頭の「ニックネーム」の部分を表示させないようにしたい』これは多分 ``` ja: activerecord: attributes: user: nickname: "" ``` でできるのではないかと思います。 『blankの時は』 nicknameのvalidationにoptionでメッセージをつけてそこに「ニックネームを入力してください」とベタに書く。 『・さらに、同じtakenのエラーでも』これは私の知識を越えてます。