2012-08-02 1 views
0

J'utilise acts-as-taggable-on 2.0.6 pour le balisage dans une application Rails 3.0.9. J'ai ajouté avec succès les attributs db-backed au modèle Tag, par exemple chaque tag a un flux RSS, donc je peux appeler @post.tags.first.feed_url pour récupérer l'URL feedburner de ma base de données.Comment rendre les méthodes ActsAsTaggableOn :: Tag héritées du modèle de balise

Mais même si je peux ajouter des attributs au modèle de balise, il semble que je ne puisse pas ajouter de méthodes d'instance. J'ai créé la méthode d'instance:

class Tag < ActiveRecord::Base 
    ... 
    def subscribable? 
    !feed_url.blank? 
    end 
    ... 
end 

Mais quand je l'appelle @post.tags.first.subscribable? je reçois l'erreur:

NoMethodError: undefined method `subscribable?' for #<ActsAsTaggableOn::Tag:0x00000100d32290> 

Est-il possible de dire ActsAsTaggableOn::Tag objets d'hériter des méthodes de modèle du modèle Tag?

Répondre

0

Je me demande exactement la même chose. Pour autant que je l'ai essayé, il ne fonctionne pas pour moi ..

class Tag < ActsAsTaggableOn::Tag 
    def total_count 
    ... 
    end 
end 

Quand je l'appelle dans un exemple de forme enchaînée sale, comme ceci:

my_model.my_instance.tag_counts_on(:tags).first.total_count 

Je reçois un

undefined method `total_count' for #<ActsAsTaggableOn::Tag id: 1, name: "first"> 
0

d'après ce que je comprends, vous ne devriez pas déclarerait un nouveau modèle « Tag » comme celui-ci, mais devrait devrait être la classe comme impérieuses ceci:

class ActsAsTaggableOn::Tag 
    def total_count 
     ... 
    end 
end 
+0

Votre réponse ressemblait à cela fonctionnerait, mais quand je remplace Tag 'class

+0

Où passez-vous la classe? Vous pouvez essayer de le placer dans vos initialiseurs pour vous assurer qu'il est appliqué au démarrage du serveur. – MichaelAP

+0

J'ai besoin du modèle de balise (et du contrôleur, des vues, etc.) pour que les utilisateurs puissent modifier une balise afin d'ajouter l'attribut feed_url que j'ai mentionné plus tôt. C'est dans le modèle que je remplace 'class Tag' par' class ActsAsTaggableOn :: Tag', ou 'class ActsAsTaggableOn :: Tag

1

Vous devez ajouter cette /config/initializers/tag_monkey_patch.rb

class ActsAsTaggableOn::Tag 
    def subscribable? 
    !feed_url.blank? 
    end 
end 
Questions connexes