我试图使用randumb
gem选择一些随机用户。我的控制器代码如下所示:
@random_users = User.order_by_rand.limit(3).all
此搜索目前包含随机结果中的current_user
。我该如何排除它?我已经尝试过了一个额外的条件id: !current_user.id
,但它似乎没有效果。
答案 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)