我在哪里设置rails错误消息的模板?

时间:2016-06-01 13:38:40

标签: ruby-on-rails internationalization rails-i18n

我希望rails显示错误消息

Field <field name> can't be blank

但是使用标准手段我得到

<field name> Field <field name> can't be blank

这是一个重现问题的最小例子:

rails new test
cd test
rails g scaffold user name
rake db:migrate

app/models/user.rb添加验证:

class User < ActiveRecord::Base
  validates :name, presence: true
end

config/locale/en.yml修改为:

en:
  activerecord:
    attributes:
      user:
        name: "Name"
    errors:
      models:
        user:
          attributes:
            name:
              blank: "Field %{attribute} can't be blank"

启动服务器后

rails s

将浏览器指向http://localhost:3000/users/new,然后按&#34;创建用户&#34;按钮。你会得到:

enter image description here

显然,在某个地方有另一个模板,其中有类似

的内容
%{attribute} %{message}

但我无法在rails代码中找到它。

1 个答案:

答案 0 :(得分:1)

这是因为在脚手架(views/users/_form.html.erb)生成的标准视图中,您有:

<% user.errors.full_messages.each do |message| %>

这是返回

的内容
  

名称字段名称不能为空

相反,您可以修改_form视图并使用user.errors.messages,在此处获得散列,其中错误分配给代表字段的键:

@user.errors.messages
{:name=>["Field Name can't be blank"]}

为了得到你所期望的,你可以编写例如:

<% @user.errors.messages.values.flatten.each do |message| %>
  <li><%= message %></li>
<% end %>