我有一个活动Feed,目前显示所有活动,包括当前用户。我的目标是只与朋友一起更新Feed。活动而不是当前用户的活动。我认为它与地图(&:id)方法有关,但我并不积极。任何指导都会超级棒!
activity.rb:
class Activity < ActiveRecord::Base
belongs_to :user
belongs_to :targetable, polymorphic: true
self.per_page = 10
def self.for_user(user, options={})
options[:page] ||= 1
# return WillPaginate::Collection.new(1, per_page, 1) unless user
friend_ids = user.friends.map(&:id).push(user.id)
collection = where("user_id in (?)", friend_ids).order("created_at desc")
if options[:since] && !options[:since].blank?
since = DateTime.strptime( options[:since], '%s' )
collection = collection.where("created_at > ?", since) if since
end
collection.page(options[:page])
end
def user_name
user.name
end
def username
user.username
end
def as_json(options={})
super(
only: [:action, :id, :targetable_id, :targetable_type, :created_at, :id],
include: :targetable,
methods: [:user_name, :username]
).merge(options)
end
end
答案 0 :(得分:0)
.push(user.id)
正在将此用户自己的ID添加到此朋友ID列表中,因此,如果您删除该ID,您只会为朋友进行活动。
friends.map(&:id)
获取用户朋友的列表,并将其映射到准备在下一行的where
条件中使用的朋友的ID列表,即它调用{ {1}}在每个朋友身上,并返回一个结果数组。