代码之家  ›  专栏  ›  技术社区  ›  gjb

轨道:字段名

  •  6
  • gjb  · 技术社区  · 14 年前

    我有一个带有“email”字段的用户模型。

    在我看来,我已将此字段的标签呈现为“电子邮件地址”,如下所示:

    <%= form_for(:user) do |f| %>
      <%= f.label :email, 'Email address' %><br /
      <%= f.text_field :email %>
    <% end %>
    

    电子邮件无效

    是否有什么东西可以添加到模型中,以便:电子邮件始终呈现为“电子邮件地址”而不是简单的“电子邮件”?

    非常感谢

    4 回复  |  直到 14 年前
        1
  •  4
  •   Martin Capodici    11 年前

    展开gjb注释,我将其添加到config/initializers/inflections.rb:

    ActiveSupport::Inflector.inflections do |inflect|
        inflect.human 'email', 'Email address' 
    end
    

    我觉得这里整洁多了。

        2
  •  7
  •   Jaime Bellmyer    14 年前

    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) %>
    

    我希望这有帮助!

        3
  •  1
  •   BenB    14 年前
    validates_presence_of  :email, :message => "address cannot be blank"
    
        4
  •  1
  •   Brian    14 年前

    有两种方法可以解决这个问题。将列重命名为电子邮件地址或修改用户模型中的验证(推荐):

    validates_presence_of :email, :message => "Address cannot be blank..."