无括号

时间:2017-02-22 19:22:08

标签: ruby-on-rails

在我看来,我想在每个表单字段下面为表单的每个字段显示一条错误消息。所以我做这样的事情:

<% 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以同时显示所有错误消息。我想显示表单上每个输入的每个错误。如何在没有括号和消息属性名称的情况下这样做?

2 个答案:

答案 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