我希望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;按钮。你会得到:
显然,在某个地方有另一个模板,其中有类似
的内容%{attribute} %{message}
但我无法在rails代码中找到它。
答案 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 %>