Rails 3完整错误消息格式

zbr*_*rox 13 ruby-on-rails

因为在Rails 3中,form.error_messages已被弃用,我使用了一个部分,我在其中迭代full_messages并构造我的html,如下所示:

<% model.errors.full_messages.each do |msg| %>
  <p><%= msg %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

{{attribute}} {{message}}
Run Code Online (Sandbox Code Playgroud)

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

bg:
 activerecord:
  errors:
   full_messages:
    format: "[...]"
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*cia 9

更改您当前的代码

<% @object.errors.full_messages.each do |msg| %>
  <li><%= msg %></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)

有了这个

<% @object.errors.messages.values.each do |msg| %>
  <% msg.each do |m| %>
    <li><%= m %></li>
  <%end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

validates :attribute, :presence => { :message => 'Attribute cannot be blank' }
Run Code Online (Sandbox Code Playgroud)


m_x*_*m_x 8

不知道它是否可以提供帮助,但Github上提供了保加利亚语语言环境文件.

你也可以尝试这个(应该根据导轨指南):

bg:
  errors:
    format: "%{message}"
    messages: &error_messages
      empty: "Something something %{attribute} something something"
Run Code Online (Sandbox Code Playgroud)

这篇博文和这个堆栈溢出问题也谈到了奇怪的{{attribute}} {{message}}结构.似乎是由安装在同一服务器上的两个I18n gem之间的冲突引起的.