Добавить сообщение в блок формообразующей семантической ошибки - PullRequest
1 голос
/ 29 февраля 2012

Если в форме есть семантические ошибки (в основном из внешнего API), я хотел бы добавить пояснительное сообщение, например так:

<%= semantic_form_for @order, :url => checkout_purchase_url, :html => {:class => 'payment'}, :wrapper_html => { :class => "field" }  do |f| %>
<% if f.has_errors? %>
    <p>There were errors that prevented your order from being submitted.  If you need assistance, please contact us toll-free at <strong>1-800-555-5555</strong>.</p>
    <%= f.semantic_errors %>
<% end %>
<% end %>

Однако has_errors? - это защищенный метод.Есть ли способ, которым я могу это сделать?Спасибо.

Ответы [ 3 ]

3 голосов
/ 19 декабря 2012

Если у вас есть вложенные атрибуты, вы не увидите ошибок, связанных с ними.Чтобы убедиться, что вы получаете все базовые ошибки и любые ошибки вложенных атрибутов.Убедитесь, что ваша модель содержит:

validates_presence_of :nested_object
validates_associated :nested_object

и в вашей форме:

f.semantic_errors *f.object.errors.keys
3 голосов
/ 29 февраля 2012

Не так сложно, как я думал.Я исправил это, проверив ошибки на объекте вместо формы:

<% if @object.errors.any? %>
    <p>There were errors that prevented your order from being submitted.  If you need assistance, please contact us toll-free at <strong>1-800-555-5555</strong>.</p>
    <%= f.semantic_errors %>
<% end %>

Спасибо за просмотр.

0 голосов
/ 28 июня 2016

Для полноты, вот альтернативный подход, если вы хотите показать одинаково полезные сообщения в каждом поле:

= f.label :title
- if f.object.errors.any?
 .error = f.object.errors[:title].flatten.join(' and ')
= f.text_field :title

Это дает красиво отформатированный и легко стилизованный список ошибок для каждого поля.(Вы можете использовать semantic_errors вместо object.errors, если хотите, тот же результат.)

...