Сортировать или упорядочить сообщения об ошибках в error_messages (Rails) - PullRequest
2 голосов
/ 24 октября 2009

Есть ли (простой) способ получить некоторый контроль над порядком, в котором ошибки модели появляются в представлении? Порядок правил, похоже, не поможет.

Ответы [ 4 ]

3 голосов
/ 25 октября 2009

Используйте error_message_on вместо error_messages, чтобы получить сообщение для отдельного атрибута.

<div class="errorMessages">
    <% %{name title description}.each do |att| %>
        <%= f.error_message_on att, :css_class => "error" %>
    <% end %>
</div>
2 голосов
/ 23 декабря 2009

В 2.3.6 сообщения о проверке будут отображаться в том порядке, в котором вы их объявили в коде

ссылка

0 голосов
/ 21 февраля 2013

У меня был такой же пробник в паре в рельсах (grails). изменение его в коде ничего не меняет, приведенный выше ответ также не работает для меня. Вот так я и решаю свою проблему. Команда создала собственный тег для сортировки / сортировки сообщений об ошибках Grails.

def renderOrderedErrors = { attrs, body ->

    def bean = attrs.bean
    def fields = attrs.fields

    fields.each { out << g.renderErrors(bean: bean, field:it) }

}

и вот как вы его используете:

<g:if test="${totalRating.hasErrors() || rating.hasErrors()}">
    <div class="errors">
        <g:if test="${totalRating.hasErrors()}"><g:renderOrderedErrors bean="${totalRating}" as="list" fields="${['totalEffectiveDate','awardedDisability']}"/></g:if>
        <g:if test="${rating.hasErrors()}"><g:renderOrderedErrors bean="${rating}" as="list" fields="${['ratingStatus','ratingIssue','disability','effectiveDate','ratingType','socDate','nodDate','ssocDate','form9Date','six46Date','remandDate']}"/></g:if>//this is the way you want to order the fields in the form
    </div>
</g:if>
0 голосов
/ 27 октября 2009

Вот ответ (для моих собственных заметок, в основном), используя ответ Балду. Это помещает атрибуты в алфавитном порядке:

<% if @model.errors.length>0 %>
  <div class="errorExplanation">
    <h3>There were problems with the following fields:</h3><ul>
      <% @model.attribute_names.each do |attribute| %>
        <% if !@model.errors[attribute].blank? %>
          <li><%= f.error_message_on attribute, Model.human_attribute_name(attribute)+ "&nbsp;", :style=>"display:inline" %></li>
        <% end %>
      </ul>
    <% end %>
  </div>
<% end %>

Конечно, вы можете параметризовать это далее как частичное, например. Я, наверное, сделаю это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...