0

我遇到了ActiveRecord::Observer记录各种站点的现有模型ActivitiesUser问题。一切都很好,直到我尝试使用与其他模型相同的模型来上课observe。考虑一下:UserActivityobserve

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

以上工作正常。查询User.activities将返回Comment Activities. 一旦我添加:userobserve方法中并将模型ActivityObserver更改为,将只返回与该实例相关的活动而不是任何has_many :activitiesUserhas_many :activities, :as => :itemUser.activitiesUserComments

为什么是这样?我能做些什么来让它按预期工作?

4

1 回答 1

1

当你改变

class User < ActiveRecord::Base
  has_many :activities
end

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

它现在正在查看item_id活动表中类型字段为 User 的字段以拉回活动 where item_id = users.id。之前它是在看user_id场活动。由于item_id字段和类型字段不能有两个值,因此您将活动指向用户或评论。不可能两者兼而有之。

于 2009-12-12T04:37:23.237 回答