在error_messages(Rails)中排序或排序错误消息

时间:2009-10-24 18:27:25

标签: ruby-on-rails

是否有任何(简单)方法可以控制模型错误在视图中出现的顺序?订购规则似乎没有任何帮助。

4 个答案:

答案 0 :(得分:3)

使用error_message_on代替error_messages获取单个属性的消息。

<div class="errorMessages">
    <% %{name title description}.each do |att| %>
        <%= f.error_message_on att, :css_class => "error" %>
    <% end %>
</div>

答案 1 :(得分:2)

在2.3.6中,验证消息将按照您在代码

中声明的顺序显示

link

答案 2 :(得分:0)

这是一个答案(基本上是我自己的笔记),使用Baldu的答案。这会将attribute_names按字母顺序排列:

<% 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 %>

当然,您可以将其进一步参数化为例如。我可能会这样做:))

答案 3 :(得分:0)

我在铁轨(grails)的groovy中有同样的问题。在代码中更改它不会改变任何东西,上面的答案也不适用于我。这就是我最终解决问题的方法。团队创建了一个自定义标签,用于排序/订购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>