Carriles actividades modelo de usuario has_many (observador), pero también deben ser observados
-
19-09-2019 - |
Pregunta
Estoy corriendo en un problema con un modelo existente ActiveRecord::Observer
que registra diversas Activities
de un User
el sitio. Todo estaba funcionando muy bien, hasta que intentó observe
la clase User
del mismo modelo Activity
que utiliza para observe
otros modelos. Considere lo siguiente:
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
Lo anterior funcionó bien. Una consulta de User.activities
volvería filas de Comment
Activities
. Tan pronto como he añadido :user
al método observe
en ActivityObserver
y cambió has_many :activities
en el modelo User
a has_many :activities, :as => :item
, User.activities
sólo devolver filas que eran actividades que pertenecen a ella User
y no cualquier Comments
¿Por qué es esto? ¿Qué puedo hacer para que esto funcione como se esperaba?
Solución
Al cambiar
class User < ActiveRecord::Base
has_many :activities
end
a
class User < ActiveRecord::Base
has_many :activities, :as => :item
end
se busca ahora en el campo de item_id
en la tabla de actividades donde el campo de tipo de usuario es dar marcha atrás en las actividades item_id = users.id
. Antes de que la estaba mirando el campo user_id
en las actividades. Puesto que el campo item_id
y campo de tipo no puede tener dos valores, se hizo de modo que un puntos de actividad, ya sea en un usuario o un comentario. No puede ser a la vez.