gjb*_*gjb 6 ruby-on-rails ruby-on-rails-3
我有一个带有'email'字段的User模型.
在我看来,我已将此字段的标签呈现为"电子邮件地址",如下所示:
<%= form_for(:user) do |f| %>
<%= f.label :email, 'Email address' %><br /
<%= f.text_field :email %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是,当生成验证错误时,将使用"电子邮件":
电子邮件无效
我可以添加到模型中以便:电子邮件始终呈现为"电子邮件地址"而不是简单地"电子邮件"吗?
非常感谢
您无需重命名表列即可执行此操作.有一个非常干净的修复:
class User < ActiveRecord::Base
HUMAN_ATTRIBUTE_NAMES = {
:email => 'Email address',
:first_name => 'First name'
}
class << self
def human_attribute_name attribute_name
HUMAN_ATTRIBUTE_NAMES[attribute_name.to_sym] || super
end
end
end
Run Code Online (Sandbox Code Playgroud)
我们所做的是创建一个属性哈希,我们想要自定义名称.您不必列出所有这些属性,因为许多属性名称将根据您的需要开箱即用.然后我们覆盖ActiveRecord的human_attribute_name方法,尝试先在哈希中找到名称.
这有两件非常酷的事情:您不再需要在表单中指定自定义标签,并且您的错误消息也将自动具有新名称!作为奖励,您现在可以通过调用以下方式在任何地方使用这些名称:
<%= User.human_attribute_name(:email) %>
Run Code Online (Sandbox Code Playgroud)
这创建了一种更统一的命名方法.如果您想在下周将"电子邮件"更改为"电子邮件",则只需在一个地方进行.
我希望这有帮助!
扩展 gjb 注释,我只是将其添加到 config/initializers/inflections.rb 中:
ActiveSupport::Inflector.inflections do |inflect|
inflect.human 'email', 'Email address'
end
Run Code Online (Sandbox Code Playgroud)
我认为这要整洁得多。
| 归档时间: |
|
| 查看次数: |
3482 次 |
| 最近记录: |