2017-02-22 70 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