3

私はUserモデルを持っています、そしてFollowingFollower

ユーザーモデル

has_and_belongs_to_many :followers, class_name: 'User', inverse_of: :following
has_and_belongs_to_many :following, class_name: 'User', inverse_of: :followers

フォロワー

has_and_belongs_to_many :followers, class_name: 'User', inverse_of: :following

続く

has_and_belongs_to_many :followings, class_name: 'User', inverse_of: :followers

そして、私はUserObserverユーザーが変更されたかどうかを確認follower_idsし、それをユーザーに追加する必要がありますActivities

では、どうすれば変更を監視しfollower_ids、最新のユーザーidに入力してもらうことができますか?activities

4

1 に答える 1

2

この場合の最良の選択肢は、新しいフォロワーを追加するロジックをメソッドにカプセル化することだと思います。このメソッドでは、必要なものをトリガーできます。

#encoding: utf-8
class User
  include Mongoid::Document
  field :followers, type: Array
  attr_readonly :followers

  def add_new_follower(new_follower)
    unless followers.include?(user) 
      followers << user 
      trigger_added_follower_observers(user)
    end
  end

  private
  def trigger_added_follower_observers(new_follower)
    # trigger the stuff you want
  end
end

ruby の Observable モジュール (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/observer/rdoc/Observable.html)、MongoID オブザーバー (http://mongoid.org) を使用するなどの代替オプションがあります。 /en/mongoid/docs/callbacks.html#observers)、または before_save フックですが、私見では、モデルを「傷つける」ことなく、上記のコードが最適なオプションだと思います。

それが役に立てば幸い。

于 2012-12-05T16:56:12.280 に答える