Rails:选择除current_user之外的随机用户

时间:2016-03-30 20:44:58

标签: ruby-on-rails search

我试图使用randumb gem选择一些随机用户。我的控制器代码如下所示:

@random_users = User.order_by_rand.limit(3).all

此搜索目前包含随机结果中的current_user。我该如何排除它?我已经尝试过了一个额外的条件id: !current_user.id,但它似乎没有效果。

1 个答案:

答案 0 :(得分:2)

您可以使用NOT SQL queries从查询中排除记录。

User.where.not(id: current_user.id).order_by_rand.limit(3)

如果这可以重复使用,您可以继续创建一个简单的范围,如下所示:

# user.rb

# ex: User.exluding(current_user).order_by_rand....
scope :excluding, (lambda do |user|
  return all unless user.present?
  where.not(id: user.id)
end)

Thoughtbot上的人们对这些类型的查询也有great article

更新来自您的评论:

排除关注者:

# user.rb

# This will also exclude the user you pass in.
# so you will not need to chain the original scope `excluding`.
scope :recommended_users, (lambda do |user|
  return all unless user.present?
  where.not(id: user.following_ids << user.id)
end)