在我看来,我想在每个表单字段下面为表单的每个字段显示一条错误消息。所以我做这样的事情:
<% if @event.errors.full_message(:date, @event.errors[:date]) %>
<div class="alert alert-danger alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Fechar"><span aria-hidden="true">×</span></button>
<%= @event.errors.full_message(:date, @event.errors[:date]) %>
</div>
<% end %>
但是消息带有括号和属性的名称。我不想在表单顶部执行each
以同时显示所有错误消息。我想显示表单上每个输入的每个错误。如何在没有括号和消息属性名称的情况下这样做?
答案 0 :(得分:1)
使用方括号[]
检索字段的相关错误:
在你的情况下:
<% if @event.errors[:date] %>
<div class="alert alert-danger alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Fechar"><span aria-hidden="true">×</span></button>
<%= @event.errors[:date].join('. ') %>
</div>
<% end %>
答案 1 :(得分:1)
@event.errors
并且是ActiveModel::Errors
的一个实例,它允许您使用[]
来检索属性的错误。您也可以以相同的方式使用get
,例如@event.errors.get(:some_attribute)
。
@event.errors[:some_attribute]
返回传递的属性的错误数组。如果您想要完整的消息,可以使用@event.errors.full_messages_for(:some_attribute)
,这也将返回一个数组。
您的视图应检查属性上的错误,如下所示:
@event.errors.has_key?(:some_attribute)
你应该迭代错误以逐一显示它们:
@event.errors[:some_attribute].each do |error|
content_tag :span, error, class: 'error'
end
或者将它们加入单个字符串或句子中:
@event.errors[:some_attribute].to_sentence
或只显示其中的第一个/最后一个:
@event.errors[:some_attribute].first