Domanda

Io corro in un problema con un modello esistente ActiveRecord::Observer che registra vari Activities di un User sito. Tutto stava funzionando molto bene, fino a quando ho provato a observe classe User con lo stesso modello Activity che utilizza per observe altri modelli. Si consideri che:

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

È possibile che questo ha funzionato bene. Una query per User.activities sarebbe tornato filari di Comment Activities. Appena ho aggiunto :user al metodo observe in ActivityObserver e cambiato has_many :activities nel modello User a has_many :activities, :as => :item, User.activities sarebbe tornato solo le righe che erano le attività relative a tale istanza User e non qualsiasi Comments

Perché è questo? Che cosa posso fare per ottenere questo lavoro come previsto?

È stato utile?

Soluzione

Quando si è modificato

class User < ActiveRecord::Base
  has_many :activities
end

a

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

è ora guardando il campo item_id nella tabella attività in cui il campo tipo è utente di tirare indietro le attività in cui item_id = users.id. Prima che stava guardando il campo user_id in attività. Dal momento che il campo item_id e il campo tipo non possono avere due valori, è fatto in modo che un punti di attività a un utente o un commento. Non può essere entrambe le cose.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top