2017-02-22 26 views
0

在我看来,我想在每个表单域下面显示我的表单的每个字段的错误消息。因此,我正在做这样的事情:不包含括号的验证错误消息

<% 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以同时显示所有错误消息。我想显示窗体上每个输入的每个错误。我怎么做,没有括号和消息属性的名称?

回答

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

工作@Alex Kojin。但为什么使用**。join('。')**去掉了消息的括号? – churros

+0

'full_messages'方法返回一个消息数组;括号是打印出来的数组对象。 http://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-full_messages – chrismanderson

+0

@churros'@ event.errors [:date]'返回一个数组。 'join'方法会将数组项添加到一个字符串中。 –

0

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

'@ event.errors.has_key?(:some_attribute)'比'<%if'event.errors [:some_attribute]%>'更好? – churros

+0

@churros只有这些作品之一。 ;)一个空数组是truthy。 – coreyward

+0

谢谢@coreyward! – churros