MENU

Rails エラーメッセージを入力項目毎に実装

こんな感じに

f:id:everydayProguramming:20201127201401p:plain

前提情報

  • Productモデルにname, email, ageカラムを作成
  • presece: trueのバリデーションを設定

修正内容

1.エラーを表示するパーシャルを作成 2.パーシャルに引数を渡す。(attributeは :nameなどの項目の情報が入っています。modelには productインスタンス

_error_message.html.erb

<% if model.errors.present? %>
  <% model.errors.full_messages_for(attribute).each do |message|%>
  <%= message%>
  <%end%>
<%end%>

2.フォームでパーシャルを呼び出す

modelとattributeに引数を渡す

<%= form_with(model: product, local: true) do |form| %>
  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name %>
    <%= render 'error_message', model: product, attribute: :name %>
  </div>

  <div class="field">
    <%= form.label :email %>
    <%= form.text_field :email %>
    <%= render 'error_message', model: product, attribute: :email %>
  </div>

  <div class="field">
    <%= form.label :age %>
    <%= form.number_field :age %>
    <%= render 'error_message', model: product, attribute: :age %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

3.ja.ymlの設定

application.rbで日本語指定

config.i18n.default_locale = :ja

これを参考に

qiita.com

参考記事

qiita.com