Ruby on Rails 〜エラーメッセージ表示から日本語化〜
エラーメッセージの表示
エラーメッセージを表示させる設定
まずは、バリデーションで設定します。
validates :text, :image, presence: true
で空では保存できないようにします。
つぎに
コントローラーで保存できる場合の条件分岐を記述します。
def create @game = game.new if @game.valid? @game.save redirect_to root_path else render 'new' end end
バリデーションで引っかかると、保存されずにnewアクションに戻る
ようにしています。
つづいて、
ビューです。
views/layoutsの下に「_error_messages.html.erb」ファイルを作ります。
<% if model.errors.any? %> <div class="error-alert"> <ul> <% model.errors.full_messages.each do |message| %> <li class='error-message'><%= message %></li> <% end %> </ul> </div> <% end %>
どのモデルにも対応できるように、「model.errors.any?」を記述しています。
最後にnew.html.erbファイルに
<%= render 'layouts/error_messages', model: form.object %>
を記述して、保存されなかったときに読み込まれエラーメッセージが表示されるようにします。 これで、エラーメッセージの設定は完了です。
日本語化
これでエラーメッセージを表示することができますが、英語表記になります。 「Text can't be blank」や「Image can't be blank」となります。
これを日本語に変換していきます。 config/application.rbを編集します。
# 中略 module game class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.0 # 日本語の言語設定 config.i18n.default_locale = :ja # 省略 end end
つぎは Gemfileを編集します。
gem 'rails-i18n'
記述できたら「bundli install」を実行します。
これで下記のサイトに記述のある日本語は変換されます
まだ、完全に日本語にできなていないので、様々な言語に対応できる言語ファイルの localeファイルを用意し、YAML形式で記述します。 YAML形式とは、ファイルの書き方のルールのことで、 文字だけで記述されているテキストのことです。
config/localesの下に「devise.ja.yml」ファイルを作ります。
からまるごとコピーして、devise.ja.ymlに貼り付けます。 これで、日本語化されます。
しかし… まだ日本語化されていないものもあります。 自身で名付けた「Nickname」や「text」などはそのまま表示されます。
config/localesの下に新たに「ja.yml」ファイルを作成します。
ja: activerecord: attributes: user: nickname: ニックネーム game: text: テキスト image: 画像
と変換したい文字を設定します。 これで、すべてが日本語化されました。 テストコードのエラーメッセージも変更されるので テストコードも変更を忘れずにしましょう!
エラーメッセージを指定する方法
バリデーションで
with_options numericality: { other_than: 1 }do validates :category_id validates :detail_id validates :delivery_fee_id validates :area_id validates :duration_id end
としてた場合 エラーメッセージは 「1以外の値を入力してください」 となります。
ユーザーからするとよくわからないですよね? たとえば 「〇〇を選択してください」 のほうがわかりやすです。
なので、エラーメッセージを変更します。
with_options numericality: { other_than: 1 , message: 'を選択してください' }do 省略
とすることで変更できます。
バリデーションによっては
validates :name, presence: { message: 'は1文字以上入力してください。' }
という記述もあるので注意です。 詳しくは
を参照してください。