エラーメッセージの表示の際に使用したメソッドをまとめたいと思います。
##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?メソッドを使ってもいいなと思います。