Userモデルのhas_manyの活動(オブザーバー)をレールにも観察されなければなりません

StackOverflow https://stackoverflow.com/questions/1892035

質問

私は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のためのクエリは、CommentActivitiesの行を返します。できるだけ早く私は:userobserveメソッドに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つの値を持つことができないので、ユーザーまたはコメントのいずれかでの活動ポイントするように、あなたはそれを作りました。これは、両方にすることはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top