Question

Je suis en cours d'exécution dans un problème avec un modèle ActiveRecord::Observer existant qui enregistre diverses Activities d'un User site. Tout fonctionnait très bien, jusqu'à ce que j'essayé de observe la classe User avec le même modèle Activity qu'il utilise pour observe autres modèles. Considérez que:

class Activity < ActiveRecord::Base
    belongs_to :user
    belongs_to :item, :polymorphic => true
end

class ActivityObserver < ActiveRecord::Observer
    observe :billing, :call, :vanity_number
end

class User < ActiveRecord::Base
    has_many :comments
    has_many :activities
end

class Comment < ActiveRecord::Base
    belongs_to :user
    has_many :activities, :as => :item
end

Le ci-dessus a bien fonctionné. Une requête pour User.activities renverrait lignes de Comment Activities. Dès que j'ai ajouté :user à la méthode observe dans ActivityObserver et changé has_many :activities dans le modèle User à has_many :activities, :as => :item, User.activities ne ferait que renvoyer les lignes qui étaient des activités se rapportant à cette instance de User et pas tout Comments

Pourquoi est-ce? Que puis-je faire pour obtenir ce travail comme prévu?

Était-ce utile?

La solution

Lorsque vous avez changé

class User < ActiveRecord::Base
  has_many :activities
end

à

class User < ActiveRecord::Base
  has_many :activities, :as => :item
end

il est maintenant à la recherche sur le terrain de item_id dans le tableau des activités où le champ de type utilisateur à se retirer des activités où item_id = users.id. Avant qu'il regardait le champ user_id des activités. Étant donné que le champ item_id et sur le terrain de type ne peuvent pas avoir deux valeurs, vous fait en sorte que les points d'une activité à un utilisateur ou un commentaire. Il ne peut pas être à la fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top