gpt4 book ai didi

ruby-on-rails - ActiveRecord 查询 : Accessing outer field in subquery

转载 作者:行者123 更新时间:2023-11-29 14:34:03 25 4
gpt4 key购买 nike

我对如何进行事件记录连接感到困惑。我有三个模型,用户、任务和响应。用户提交对任务的响应。我在 ActiveRecord 中使用 has_many, through: 模式。

class Task < ApplicationRecord
has_many :users, through: :responses
has_many :responses
validates :response_limit, presence: true

class User < ApplicationRecord
has_many :responses
has_many :tasks, through: :responses

class Response < ApplicationRecord
belongs_to :task, optional: false
belongs_to :user, optional: false

用简单的英语来说,我想创建一个给定查询的查询,返回所有任务:

  1. 响应计数小于任务中的 :response_limit 字段
  2. 用户尚未回复。

我能够通过这个嵌套查询满足 #2,这是我从之前的问题中得到的。

Task.where.not(id: Response.select(:task_id).where(user_id: params[:user_id]))

但是,我很难满足第一个要求。我试了一下,得到了这个:

Task.where.not(id: Response.select(:task_id).where(user_id: params[:user_id])).where('response_limit > (?)', Response.where(task_id:task.id).count)

我的问题是我不确定如何将外部查询中的 task_id 获取到 Response 子查询中。

最佳答案

为此,您可以尝试使用 SQL GROUP BY 和 HAVING 子句来帮助您计算响应并根据条件过滤它们

Task.select("tasks.*, COUNT(responses.id) AS response_count")
.joins(:responses)
.group("tasks.id")
.where.not(id: Response.select(:task_id).where(user_id: params[:user_id]))
.having("COUNT(responses.id) < tasks.response_limit")

关于ruby-on-rails - ActiveRecord 查询 : Accessing outer field in subquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com