选择具有包含在数组中的属性的实例

时间:2016-05-18 07:29:41

标签: sql ruby-on-rails activerecord

我正在使用公共活动来创建Feed,我想过滤这些活动。我不想向current_user展示自己的活动,所以我有:

@activities = PublicActivity::Activity.where.not(owner_id: current_user.id)

这很有效。我想添加第二个过滤器,它只显示属于用户current_user的活动。

我可以使用以下所有用户:

@users = current_user.following

我的问题是:如何通过检查owner_id@users中包含的用户的ID来过滤活动?

编辑:

activities表:

create_table "activities", force: :cascade do |t|
    t.integer  "trackable_id"
    t.string   "trackable_type"
    t.integer  "owner_id"
    t.string   "owner_type"
    t.string   "key"
    t.text     "parameters"
    t.integer  "recipient_id"
    t.string   "recipient_type"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.boolean  "read",           default: false
    t.string   "origin"
  end

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

Activity.joins(:owner).where.not(
           users: {id: current_user.id}
       ).joins(owner: :followings).where(
           followings: { follower_id: current_user.id }
       )

这转换为所有不属于current_user的活动,但DO属于用户,后跟current_user

您可能需要替换适当的值。