如何在公共活动中设置朋友作为收件人?

时间:2016-01-01 20:06:32

标签: ruby-on-rails

我为我的应用设置了友情模型,

belongs_to :user
belongs_to :friend, :class_name => "User"

模型看起来像这样,

has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user

这是我的用户模型,

include PublicActivity::Model
tracked owner: -> (controller, model) { controller && controller.current_user }
tracked :params => {
  :title => :get_title,
  :poster => :get_poster
}

has_and_belongs_to_many :users

我用Public Activity gem跟踪了我的电影模型,

{{1}}

目前的情况是,当用户向应用添加活动时,每个其他用户都会看到该通知。我想要的是只将活动发送给用户的朋友。

我认为所有必要的数据和链接都已预设,但我不确定如何将其全部挂钩。

1 个答案:

答案 0 :(得分:1)

我认为你必须通过custom activity来做到这一点。 例如,

创建新电影时,您可以使用回调方法

创建活动
after_create :create_activity

def create_activity
   user.friends.each do |friend|
      self.create_activity action: :new , parameters: {title:title,poster:poster}, recipient: friend, owner: current_user
  end
end
然而,这种解决方案效率很低。我不确定是否为gem提供了一个方法,你可以一起创建多个活动,比如ActiveRecord,Moview.create([{title:1},{title:2}])。否则,很多人都希望将其转移到后台工作中,例如sidekiq