Frage

Ich laufe in ein Problem mit einem bestehenden ActiveRecord::Observer Modell, das verschiedene Activities eines User die Website aufzeichnet. Alles funktioniert wirklich gut, bis ich versuchte, die observe Klasse mit dem gleichen User Modell Activity, die es verwendet andere Modelle observe. Bedenken Sie, dass:

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

Das oben hat gut funktioniert. Eine Abfrage für User.activities zurückkehren würde Reihen von Comment Activities. Sobald ich :user zur observe Methode in ActivityObserver und geändert has_many :activities im User Modell hinzugefügt has_many :activities, :as => :item würde User.activities nur Zeilen zurück, Aktivitäten zu dieser User Instanz im Zusammenhang waren und nicht jeder Comments

Warum ist das? Was kann ich tun, um diese Funktion zu erhalten, wie erwartet?

War es hilfreich?

Lösung

Wenn Sie geändert

class User < ActiveRecord::Base
  has_many :activities
end

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

es sucht nun am item_id Feld in der Tabelle Aktivitäten, wo der Typ Feld Benutzer ist es, Aktivitäten zurück zu ziehen, wo item_id = users.id. Bevor es in Aktivitäten im Bereich user_id suchen. Da das item_id Feld und Typ-Feld nicht zwei Werte haben kann, Sie haben es so, dass eine Aktivität Punkte an einen Benutzer oder einen Kommentar. Es kann nicht beides sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top