2017-02-22 3 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 Только одна из этих работ. ;) Пустой массив правдивый. – coreyward

+0

Спасибо @coreyward! – churros

Смежные вопросы