2

私の知る限り、Rails 3 でフィールドの「人間化された」名前を設定する受け入れられている方法は、ロケールを使用することです。

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

ただし、Rails 3 には、デフォルトの人間化された名前の小文字バージョンを使用してもらいたいだけです。これを行う簡単な組み込みの方法はありますか?

わかりやすくするための例: の内部ではform_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を提供する独自のものでオーバーライドしてから、元の機能を呼び出すことです。:defaultRails は、この種のことを で行う合理的な方法を提供している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 に答える