【问题标题】:Getting the correct users with activerecord使用 activerecord 获取正确的用户
【发布时间】:2015-10-27 19:54:31
【问题描述】:

目前我有一个包含 10,000 个用户的表,我想搜索这些用户。我还有另一个我已批准的 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_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_user_ids 只给我上面语句的 id 部分,所以它返回这个:

[37, 35, 41]

现在,我希望pre_search_results 将其他 9997 个用户返回给我,并且我有上述声明。它目前没有返回任何内容。有什么想法可以做什么?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    要获取所有 ID 不存在于 approved_user_ids 中的用户,您可以使用:pre_search_results = User.where("id NOT IN (?)", approved_user_ids)

    【讨论】:

    • 有什么办法可以将它与:pre_search_results = User.where('name LIKE ? OR operator_id LIKE ?', "%#{query}%", "%#{query}% ").order(:name)
    • @JohnSmith 我有点困惑......你的问题说你想要“pre_search_results 给我 9997 个其他用户”,但我猜你想用在您的评论中查询?我将编辑我的答案。
    • 你是对的!我很抱歉,应该更清楚。
    【解决方案2】:

    我的想法是将您的两个不同条件分成两个不同的范围,然后可以将它们链接在一起......

    我还假设您的 User 模型中存在关系。

    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) }
    

    ...它可以让您在控制器(或任何地方)中执行某些操作,例如...

    User.has_not_been_approved.search_by_name("Rodolfo")
    

    has_not_been_approved 的作用域有点尴尬。这是我找到示例的地方:Rails find record with zero has many records associated

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2021-03-13
      • 2021-04-28
      • 2020-01-26
      • 2020-03-30
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多