我有一个带有“电子邮件”字段的用户模型。
在我看来,我已将此字段的标签呈现为“电子邮件地址”,如下所示:
<%= form_for(:user) do |f| %>
<%= f.label :email, 'Email address' %><br /
<%= f.text_field :email %>
<% end %>
但是,当生成验证错误时,将使用“电子邮件”:
Email is invalid
我可以在模型中添加一些内容,以便 :email 始终呈现为“电子邮件地址”而不是简单的“电子邮件”吗?
非常感谢
最佳答案
您不需要重命名表列即可执行此操作。有一个非常干净的修复:
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
我们所做的是创建一个属性的哈希值,我们要在其中自定义名称。您不必列出所有属性名称,因为许多属性名称可以按照您的需要开箱即用。然后我们重写 ActiveRecord 的 human_attribute_name 方法,尝试首先在哈希中查找名称。
这做了两件非常酷的事情:您不再需要在表单中指定自定义标签,并且您的错误消息也将自动具有新名称!作为奖励,您现在可以在任何地方使用这些名称,只需调用:
<%= User.human_attribute_name(:email) %>
这创建了一种更加统一的命名方法。如果您想下周将“电子邮件”更改为“电子邮件”,只需在一处进行即可。
希望这会有所帮助!
关于ruby-on-rails - rails : Field names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077561/