Rails 3完整错误消息格式

时间:2010-12-24 18:10:17

标签: ruby-on-rails

因为在Rails 3中,form.error_messages已被弃用,我使用的是partial,我遍历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: "[...]"

然而,验证错误的格式保持不变。

3 个答案:

答案 0 :(得分:9)

更改您当前的代码

<% @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' }

答案 1 :(得分:8)

不知道它是否有帮助,而是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 poststack overflow issue也讨论了奇怪的{{attribute}} {{message}}结构。似乎是由安装在同一服务器上的两个I18n gem之间的冲突引起的。

答案 2 :(得分:2)

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

@ object.errors.full_messages_for(:名称)

=&GT; [&#34;名称太短(最少5个字符)&#34;,&#34;名称不能为空白&#34;]