ActiveRecord查询返回对象两次(同一对象的2个实例)

时间:2015-07-27 16:31:19

标签: sql ruby-on-rails ruby-on-rails-4 activerecord

我的查询可能有问题,不确定是什么......

# 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]

1 个答案:

答案 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")