在哪里设置 rails 错误消息的模板?
Where do I set template for rails error messages?
我希望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 并按 "Create User" 按钮。你会得到:
显然,某处还有另一个模板,上面写着类似
的内容
%{attribute} %{message}
但我在 rails 代码中找不到它。
这是因为在脚手架 (views/users/_form.html.erb
) 生成的标准视图中,您有:
<% user.errors.full_messages.each do |message| %>
这就是returns
Name Field Name can't be blank
相反,您可以修改 _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 %>
我希望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 并按 "Create User" 按钮。你会得到:
显然,某处还有另一个模板,上面写着类似
的内容%{attribute} %{message}
但我在 rails 代码中找不到它。
这是因为在脚手架 (views/users/_form.html.erb
) 生成的标准视图中,您有:
<% user.errors.full_messages.each do |message| %>
这就是returns
Name Field Name can't be blank
相反,您可以修改 _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 %>