2010-12-07 4 views
0

Ce code fonctionne correctement. Je souhaite mettre cette méthode dans un fichier commun et l'utiliser dans chaque modèle.Étendre la méthode de classe

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

Comment puis-je faire cela?

Répondre

2

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.

+0

Oui j'ai fait la même chose et ça marche bien. Mais est-ce un moyen préféré de le faire? –

+0

Est-ce que la traduction fonctionne avec ça? –

+0

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

0

Avez-vous essayé locale.yml pour cette fonctionnalité?

+0

Qu'est-ce que j'ai besoin de modifier pour cela? –

0

Vous pouvez le mettre sur votre application_controller et utiliser cette ligne:

helper_method :human_attribute_name 

Maintenant, vous pouvez l'utiliser à travers le système

Questions connexes