Trilhos actividades modelo User has_many (observador), mas também deve ser observado
-
19-09-2019 - |
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?
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.