2011-12-16 16 views
7

自動生成されたものを使用するのではなく、データベースフィールドの表示名を設定することはできますか?Railsでフィールドの表示名を設定する方法

フィールドにはbbe_dateがあり、画面には、表示されている文字列として「Best Before」が使用されています。私は手動でこれを設定するいくつかのビューを通過してきましたが、より良い方法がありますか?

フィールド名が人間が判読できる形式でブラウザに送信されると、これが有効になります。

record.errors.add :bbe_date, 'not valid' 

を、私は特別にこのインターセプト、私は単に「BBEを参照してくださいしない限り: - (!それは少しなので、私はすでに手動で処理されていない)私の検証コードがやっている私は特に、同様の検証エラーを考えています有効ではない日付 'を検証エラーとして返します。

+0

「best_before」という名前のフィールドをリファクタリングしてみませんか?ちょっとした考え。 –

+0

可能性はありますが、クライアントがフィールドの別の名前を参照したいからといって、データベースを変更しないでください。これは一般的な解決策ではありません。元のBBEの日付名でさえ、Bbeの日付に自動生成されるからです.RailsはBBEが頭字語であることを知らないためです。 – asc99c

答えて

13

internationalization (I18N)が必要です。うん、もしあなたがただ英語をしたいと思っても。

のconfig /ロケール/ en.ymlを変更し、設定:

en: 
    activerecord: 
    attributes: 
     your_lower_case_model_name: 
     bbe_date: Best Before 
+0

クール、それを行ってもらえます! – asc99c

+0

遅れを受け入れるのは申し訳ありません!ちょうどそれに戻って、それは素晴らしい作品 – asc99c

0

一つの方法は、これを行う行うには、あなたのデフォルトの表示名を与えるhuman_attribute_nameの動作をオーバーライドすることです。これはRailsの2であるならば、あなたはhuman_attribute_nameからオプションのparamを削除する必要がありますことを

HUMANIZED_ATTRIBUTES = { 
    :bbe_date => "Best Before" 
} 

def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
end 

注:お使いのモデルでは。