활성 레코드 조인을 수행하는 방법에 혼란스러워합니다. 세 가지 모델 인 User, Task 및 Response가 있습니다. 사용자가 작업에 대한 응답을 제출합니다. 나는 ActiveRecord에서 has_many, through : 패턴을 사용하고있다. 댄 적은 계산ActiveRecord 쿼리 : 하위 쿼리에서 외부 필드에 액세스
- 가 응답을 가지고 : response_limit 필드를
- 작업에 일반 영어
, 나는 쿼리를 주어진 쿼리를 만들 싶습니다, 모든 작업을 반환 사용자가 이미 응답하지 않았습니다.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
이전 질문에서 얻은이 중첩 된 쿼리로 # 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을 얻을하는 방법을 잘 모르겠어요 것입니다. 이를 위해
거의 완벽합니다. 내가 바꾸어야 만 한 것은 조인을 left_outer_joins로 바꾸고 .distinct를 추가하는 것입니다. 조인을하면 응답이없는 작업을 반환하지 않기 때문입니다. 그 외 멋진 답변! :) – JCDJulian