Rails: ошибки, близкие к определенным полям в формах - PullRequest
3 голосов
/ 17 марта 2012

Я пытаюсь добавить некоторые ошибки в форму рядом с полем, вызвавшим ошибку, и вот как я это делаю:

 <%= lesson_form.text_field :description %><br />
  <% unless @lesson.errors[:description].blank? %>
    <span id="error_explanation">
      Description <%= @lesson.errors[:description].join(", ") %>
    </span>
  <% end -%>

  <%= lesson_form.label :category %>
  <%= lesson_form.text_field :category %><br />
  <% unless @lesson.errors[:category].blank? %>
    <span id="error_explanation">
      Category <%= @lesson.errors[:category].join(", ") %>
    </span>
  <% end -%>

Я хотел бы знать, есть ли лучшийнеповторяющийся способ сделать это.Как вы видите, я повторяю то же самое, если нет ошибок ... для каждого из полей.

1 Ответ

11 голосов
/ 18 марта 2012

Используйте вспомогательный метод:

def errors_for(model, attribute)
  if model.errors[attribute].present?
    content_tag :span, :class => 'error_explanation' do
      model.errors[attribute].join(", ")
    end
  end
end

А в виду:

<%= lesson_form.text_field :description %><br />
  <%= errors_for @lesson, :description %>

  <%= lesson_form.label :category %>
  <%= lesson_form.text_field :category %><br />
  <%= errors_for @lesson, :category %>
<% end %>

Или вы можете использовать simple_form , который сделает все это для вас так:

<%= simple_form_for @lesson do |f| %>
  <%= f.input :description %>
  <%= f.input :category %>
  <%= f.button :submit %>
<% end %>

И если вы используете simple_form и haml , все выглядит немного лучше:

= simple_form_for @lesson do |f|
  = f.input :description
  = f.input :category
  = f.button :submit

Приведенное выше сообщение покажет ошибку рядом с полем, определит тип атрибута и покажет соответствующее поле ввода (например, текст, пароль, флажок и т. Д.), Все в одну простую строку f.input.

...