使用ruby map方法并排除当前用户

时间:2015-02-25 22:53:44

标签: ruby-on-rails ruby

我有一个活动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

1 个答案:

答案 0 :(得分:0)

.push(user.id)正在将此用户自己的ID添加到此朋友ID列表中,因此,如果您删除该ID,您只会为朋友进行活动。

friends.map(&:id)获取用户朋友的列表,并将其映射到准备在下一行的where条件中使用的朋友的ID列表,即它调用{ {1}}在每个朋友身上,并返回一个结果数组。