Pergunta

Eu estou correndo em um problema com um modelo ActiveRecord::Observer existente que registra vários Activities de um User o site. Tudo estava funcionando muito bem, até que eu tentei observe a classe User com o mesmo modelo Activity que ele usa para observe outros modelos. Considere 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

A multa acima funcionou. A consulta para User.activities voltaria fileiras de Comment Activities. Assim que eu adicionei :user ao método observe em ActivityObserver e mudou has_many :activities no modelo User para has_many :activities, :as => :item, User.activities só voltaria linhas que foram atividades referentes a essa instância User e não qualquer Comments

Por que isso? O que posso fazer para começar este trabalho como esperado?

Foi útil?

Solução

Quando você mudou

class User < ActiveRecord::Base
  has_many :activities
end

para

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

é agora a olhar para o campo item_id na tabela de actividades onde o campo Tipo é usuário para atividades de recuo onde item_id = users.id. Antes que ele estava olhando para o campo user_id em atividades. Como o campo item_id e tipo de campo não pode ter dois valores, você fez com que um pontos de atividade em um usuário ou um comentário. Ele não pode ser ambos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top