Je devine que vous souhaitez utiliser human_attribute_name
pour toutes les sous-classes de ActiveRecord::Base
- Si c'est le cas, il suffit d'étendre ActiveRecord::Base
avec cette méthode, afin qu'elle soit disponible pour toutes ses sous-classes: il suffit d'ouvrir la classe, de définir la méthode, et vous êtes prêt à partir:
class ActiveRecord::Base
def self.human_attribute_name(attr,options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
end
Il suffit de placer cela sur config/initializers/active_record.rb
, et il sera automatiquement requis par l'application.
Vous pouvez également utiliser les outils i18n présents dans des rails pour obtenir un résultat similaire - en supposant que votre locale est en
:
# config/locales/en.yml
en:
activerecord:
attributes:
ar_inv_header:
shipto_customer_address: "Ship to customer address "
De cette façon, vous pouvez simplement appeler ArInvHeader.human_attribute_name(:shipto_customer_address)
. C'est la manière préférée de changer les "noms humains" des modèles et des attributs ActiveRecord.
Oui j'ai fait la même chose et ça marche bien. Mais est-ce un moyen préféré de le faire? –
Est-ce que la traduction fonctionne avec ça? –
Je pense que c'est la façon la plus propre de le faire - et comment la plupart des gens le font, vraiment. Si vous jetez un coup d'œil à quelques gemmes qui étendent en quelque sorte la fonctionnalité de base des modèles Rails (acts_as_ *, par exemple), vous pouvez voir le même motif appliqué. Lire ceci: http://yehudakatz.com/2009/11/12/better-ruby-idioms/ – jgradim