在Rails 3中强制字段的“人性化”名称为小写

时间:2011-01-31 01:18:12

标签: ruby-on-rails ruby-on-rails-3 humanize

据我所知,在Rails 3中设置字段的“人性化”名称的可接受方法是使用区域设置:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      member:
        username: 'username' # rather than 'Username'

但是,我只是希望Rails 3使用其默认人性化名称的小写版本。是否有一种简单的内置方法可以做到这一点?

有助于澄清的示例:在form_for内,<%= f.label :username %>默认显示“用户名”。我希望它显示“用户名”。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。 我通过css解决了它:

在foo.html.erb中:

<%= f.label :username, :class => "my_class" %>

在bar.css中:

label.my_class {
    text-transform:   lowercase;
}

我也希望有一个不同的解决方案。但到目前为止,这是我能找到的唯一一个。

答案 1 :(得分:1)

label帮助器默认使用human_attribute_name将属性转换为人名。如果您查看来源,human_attribute_name会尝试一些事情,然后再回到attributes.to_s.humanize。它首先尝试翻译,然后在选项哈希中查找:default选项。

因此,获得所需功能的最简单/最佳方法是使用您自己的human_attribute_name覆盖:default,然后调用原始版本。 Rails提供了一种使用alias_method_chain来完成此类操作的合理方法,因此......

我听够了,请给我答案!

将以下内容放入config/initializers中的任意文件中,然后重新启动您的应用:

module ActiveModel
  module Translation
    def human_attribute_name_with_foo attribute, options = {}
      human_attribute_name_without_foo attribute, options.merge( :default => attribute.humanize.downcase )
    end

    alias_method_chain :human_attribute_name, :foo
  end
end