0
0

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.

any?メソッドを使用してエラーメッセージの取得

Last updated at Posted at 2020-08-07

エラーメッセージの表示の際に使用したメソッドをまとめたいと思います。

##any?メソッドとは

any?メソッドはすべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。

書き方はこのような感じ

p [false, nil].any? # => false

例えばエラーメッセージの記述を部分テンプレートに記載してオブジェクトにエラー情報がある場合のみ表示するように設定するとします。

app/controllers/items_controller.rb
def create
    @item = Item.new(item_params)
    if @item.save
      redirect_to root_path
    else
      render :new
    end
  end

この記述でバリデーション等で保存に失敗した際に
newアクションへ戻るように設定します。

app/views/items/new.html.erb

  <%= form_with model: @item, local: true do |f| %>
      <%= render 'shared/error_messages', model: @item %> 

レンダー先にエラーの情報を持ったモデルオブジェクトを持っていきます。

app/views/shared/_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 %>

any?メソッドでerrorsの中身を確認して存在する場合はtrueとなりエラーの繰り返し処理が働きます。

またpresent?メソッドとかなり似ていますがany?メソッドは

上記例では繰り返し処理でエラーメッセージ を表示していますが

labelの場所ごとにエラーメッセージを表示したい場合はinclude?メソッドを使ってもいいなと思います。

0
0
9

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?