【问题标题】:Rails 3 full error messages formatRails 3 完整的错误消息格式
【发布时间】:2010-12-24 18:10:17
【问题描述】:

由于在 Rails 3 中 form.error_messages 已被弃用,我正在使用部分迭代 full_messages 并像这样构造我的 html:

<% model.errors.full_messages.each do |msg| %>
  <p><%= msg %></p>
<% end %>

但是应用程序的默认语言环境不是英语,而且在我的语言中,full_messages 的结构有点不自然:

{{attribute}} {{message}}

我从 generate_full_messages 的源代码中看到我可以本地化格式,所以在我的语言环境的 yml 文件 (bg.yml) 中我添加了这个:

bg:
 activerecord:
  errors:
   full_messages:
    format: "[...]"

但是验证错误的格式保持不变。

【问题讨论】:

  • 你想要什么格式?
  • 细节并不重要。我希望它以一个特定的词开头,然后是 {{attribute}} {{message}} 因为没有这个词在我的语言中听起来很尴尬。

标签: ruby-on-rails


【解决方案1】:

更改您当前的代码

<% @object.errors.full_messages.each do |msg| %>
  <li><%= msg %></li>
<% end %>

有了这个

<% @object.errors.messages.values.each do |msg| %>
  <% msg.each do |m| %>
    <li><%= m %></li>
  <%end %>
<% end %>

并在您的模型中自定义消息:

validates :attribute, :presence => { :message => 'Attribute cannot be blank' }

【讨论】:

    【解决方案2】:

    不知道是否有帮助,但是locale file for Bulgarian is available on Github

    你也可以试试这个(应该按照rails guides工作):

    bg:
      errors:
        format: "%{message}"
        messages: &error_messages
          empty: "Something something %{attribute} something something"
    

    this blog post 和这个stack overflow issue 也谈论奇怪的{{attribute}} {{message}} 结构。似乎是由安装在同一台服务器上的两个 I18n gem 之间的冲突引起的。

    【讨论】:

      【解决方案3】:

      返回数组中给定属性的所有完整错误消息。

      @object.errors.full_messages_for(:name)

      => ["名称太短(最少 5 个字符)", "名称不能为空"]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多