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 回答