Ruby on rails 使用activerecord获取正确的用户

Ruby on rails 使用activerecord获取正确的用户,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,目前,我有一个10000名用户的表,我想搜索他们。我还有另外一个表,其中包含我已批准的3个用户。我想让搜索结果只返回9997个用户。换句话说,如果我已经批准了一个用户,我不希望他们出现在搜索结果中。以下是迄今为止我对代码的了解: approved_users = Approval.where(user_id: logged_in_user.id) approved_user_ids = approved_users.map { |user| user.approved_user_id} pre

目前,我有一个10000名用户的表,我想搜索他们。我还有另外一个表,其中包含我已批准的3个用户。我想让搜索结果只返回9997个用户。换句话说,如果我已经批准了一个用户,我不希望他们出现在搜索结果中。以下是迄今为止我对代码的了解:

approved_users = Approval.where(user_id: logged_in_user.id) 
approved_user_ids = approved_users.map { |user| user.approved_user_id}
pre_search_results = User.find_by_sql("SELECT *
  FROM users LEFT JOIN approvals
  ON users.id = approvals.approved_user_id
  WHERE name LIKE ? OR operator_id LIKE ?"
  )
当我手动添加3个用户时,第一条语句
approved\u users
返回此值:

id: 10, user_id: 39, approved_user_id: 37
id: 11, user_id: 39, approved_user_id: 35>,
id: 12, user_id: 39, approved_user_id: 41>
然后我制作了
approved\u user\u id
只要给我上面语句的id部分,它就会返回这个:

[37,35,41]


现在,我想
pre_search_results
将9997其他用户返回给我,我有上述声明。它目前没有返回任何内容。有什么办法吗

要获取id不在
approved\u user\u id
中的所有用户,您可以使用:
pre\u search\u results=user。其中(“id不在(?),approved\u user\u id)
我的想法是将两个不同的条件分为两个不同的范围,然后可以链接在一起

我还假设您的
用户
模型中存在一种关系

user.rb

class User
  has_many :approvals

  scope :has_been_approved, -> { joins(:approvals) }
  scope :has_not_been_approved, -> ( includes(:approval).where(approvals: { user_id: nil })
  scope :search_by_name, ->(term) { where("name LIKE :t", t: term) }
…它允许您在控制器(或任何地方)中执行某些操作,如


的范围尚未得到批准
有点尴尬。在这里我找到了一个例子:

有没有什么方法可以将它与:pre_search_results=User.where('name LIKE?或operator_id LIKE?',“%{query}%”,“%{query}%”结合起来。order(:name)@JohnSmith我有点困惑。。。您的问题是希望“
pre_search_results
将9997其他用户返回给我”,但我猜您希望在评论中使用查询来查询这些结果?我将编辑我的答案。你是对的!对不起,我应该说得更清楚些。
User.has_not_been_approved.search_by_name("Rodolfo")