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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top