2

据我所知,在 Rails 3 中设置“人性化”字段名称的公认方法是使用语言环境:

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

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

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

4

2 回答 2

3

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

在 foo.html.erb 中:

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

在 bar.css 中:

label.my_class {
    text-transform:   lowercase;
}

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

于 2011-04-28T14:47:08.293 回答
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
于 2011-04-28T18:09:43.020 回答