Userモデルのhas_manyの活動(オブザーバー)をレールにも観察されなければなりません
-
19-09-2019 - |
質問
私はActiveRecord::Observer
サイトの様々なActivities
を記録し、既存のUser
モデルで問題に実行していますよ。私はそれが他のモデルをobserve
するために使用するのと同じUser
モデルでActivity
クラスをobserve
しようとしたまですべてが、本当によく働いていました。それを考えてみます:
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
の行を返します。できるだけ早く私は:user
でobserve
メソッドにActivityObserver
を追加し、has_many :activities
するUser
モデルでhas_many :activities, :as => :item
を変更して、User.activities
は唯一の活動はそのUser
インスタンスとのありませんのいずれかのComments
これはなぜでしょうか?予想通り、私はこの作業を取得するために何ができる?
解決
あなたが変更した場合
class User < ActiveRecord::Base
has_many :activities
end
タグに
class User < ActiveRecord::Base
has_many :activities, :as => :item
end
それは今のタイプフィールドがitem_id
活動を引き戻すためのユーザーで活動テーブルにitem_id = users.id
フィールドを見ています。それは活動にuser_id
フィールドを見ていた前に。 item_id
フィールドとタイプフィールドは、2つの値を持つことができないので、ユーザーまたはコメントのいずれかでの活動ポイントするように、あなたはそれを作りました。これは、両方にすることはできません。
所属していません StackOverflow