我的查询可能有问题,不确定是什么......
# this is the correct output
Plan.select { |p| p.plan_dates.select { |pd| pd.ddate.to_date >= cancel_from_this_date }.count > 0 }.map(&:id)
# => [54]
# this is the output where the object is returned twice
Plan.joins(:plan_dates).where("plan_dates.ddate >= ?", cancel_from_this_date.in_time_zone).pluck("id")
# => [54, 54]
答案 0 :(得分:2)
很自然。
Plan.joins(:plan_dates)
返回a Plan object for all Plan with PlanDate
。
现在,如果多个plan_dates
有一个Plan
,您将获得重复plans
。
要解决此问题,您需要使用uniq
,如下所示:
Plan.joins(:plan_dates).uniq.where("plan_dates.ddate >= ?", cancel_from_this_date.in_time_zone).pluck("id")