1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

バリデーションのエラーメッセージの個別表示

Posted at

自分用です!!

バリデーションでのエラーメッセージをviewで表示していきます。

例えば、userを登録するときに、passwordとnameにpresence: trueのバリデーションをかけた、状態でパスワードとnameを空欄で登録すると、バリデーションに引っかかります。

railsのオブジェクトは、デフォルトでエラーオブジェクトを保持しているので、画像のようにエラーメッセージを取得できます。

ここでエラーメッセージが日本語化されているのは、i18nの働きによるものです。

さらに、full_messagesというメソッドを使用することで、エラーメッセージだけを取り出すことができます。

スクリーンショット 2020-08-06 3.06.38.png

エラーメッセージは、色々な入力フォームで使いたいので、パーシャルを使います。

_error_messages.html.erb
<% if object.errors.any? %>
  <% object.errors.full_messages.each do |message| %>
    <div class="alert alert-danger"><%= message %></div>
    <% end %>
<% end %>

個別で表示したいので、each文を使用。

objectを指定して、そのobjectのエラーメッセージを表示されるようにします。

users/new.html.erb
<%= form_with model: @user, local: true do |f| %>
        <%= render 'shared/error_messages', object: f.object %>
        <div class="form-group">
          <%= f.label :first_name %>
          <%= f.text_field :first_name %>
<% end %>

このように、パーシャルを呼び出します。

object: f.objectでは、f.objectに@userが入っており、パーシャル側では、そのobjectのエラー文を表示してくれます。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?