Quelle est la méthode recommandée pour étendre le comportement des classes, via class_eval
et les modules (pas par héritage) si je veux étendre une classe enfouie dans un Gem à partir d'une application Rails 3?Comment/Quand/Où étendre les classes de gemmes (via class_eval et Modules) dans Rails 3?
Un exemple est la suivante:
Je veux ajouter la possibilité de créer des permaliens pour les balises et les catégories (par les pierres précieuses ActsAsTaggableOn et ActsAsCategory). Ils ont défini les modèles Tag
et Category
.
Je veux faire essentiellement ceci:
Category.class_eval do
has_friendly_id :title
end
Tag.class_eval do
has_friendly_id :title
end
Même s'il y a d'autres façons d'ajouter cette fonctionnalité qui pourrait être spécifique à la pierre précieuse, ce qui est la méthode recommandée pour ajouter un comportement à des classes dans Rails 3 application comme ça?
J'ai quelques autres gemmes que j'ai créées que je veux faire ceci, comme un modèle Configuration
et un modèle Asset
. Je voudrais être en mesure d'ajouter créer une classe de modèle app/models/configuration.rb
à mon application, et il agirait comme si je viens de le faire class_eval
.
De toute façon, comment cela est-il supposé fonctionner? Je ne trouve rien qui couvre cela de l'un des blogs/docs/gists courants Rails 3.
J'ai le même problème, je reçois 'LoadError: attendu app/models/tag.rb pour définir Tag' – MhdSyrwan
MhdSyrwan: Cela signifie que dans votre fichier 'tag.rb', la première classe à définir doit être appelée exactement "Tag", donc il semble que vous ne l'avez pas nommé de la bonne façon. –