【发布时间】:2015-12-04 11:14:01
【问题描述】:
我有 3 个表驱动程序、工作和tip_travel_time。而他们的联想是这样的
Class Job < ActiveRecord::Base
belongs_to :driver, primary_key: :username
end
Class Driver < ActiveRecord::Base
has_many :jobs, foreign_key: :driver_id, primary_key: :username
has_many :tip_travel_times,foreign_key: :driver_id
end
class TipTravelTime < ActiveRecord::Base
belongs_to :driver
end
现在我正在使用 activeadmin 并希望将这两个查询组合在一起
TipTravelTime.joins(:driver).where('users.runsheet_type IN (?,?,?)',Driver::LIQUID, Driver::FRONTLIFT, Driver::REARLIFT).group(:driver_id).select('ceil(avg(time_difference)/60) as average_time_in_minutes, driver_id').order(:driver_id)
Job.joins(:driver).where('users.runsheet_type IN (?,?,?)',Driver::LIQUID, Driver::FRONTLIFT, Driver::REARLIFT).group(:driver_id).where('completed_at is not null and started_at is not null').select('ceil(AVG(completed_at - arrived_at)/60) as average_completion_time_in_minutes, driver_id').order(:driver_id)
enter code here
我通过以下查询将它们组合起来:
Driver.joins(:tip_travel_times, :jobs).where('runsheet_type IN (?,?,?)',Driver::LIQUID, Driver::FRONTLIFT, Driver::REARLIFT).group(:driver_id).where('jobs.completed_at is not null and jobs.started_at is not null').select('ceil(AVG(jobs.completed_at - jobs.arrived_at)/60) as average_completion_time_in_minutes, ceil(avg(tip_travel_times.time_difference)/60) as average_time_in_minutes, jobs.driver_id').order(:driver_id)
但最后一个查询返回给我以下错误:Mysql2::Error: Column 'driver_id' in field list is ambiguous: SELECT COUNT(*) AS count_all, driver_id AS driver_id FROM users INNER JOIN tip_travel_times ON tip_travel_times.driver_id = users.id INNER JOIN jobs ON jobs.driver_id = users.username WHERE users.type IN ('Driver') AND (runsheet_type IN ('liquid','frontlift','rearlift')) AND (jobs.completed_at is not null and jobs.started_at is not null) GROUP BY driver_id LIMIT 10000 OFFSET 0
知道哪里出了问题或我能做些什么来实现这一点吗?
【问题讨论】:
-
你有
Job和TipTravelTime两者都有driver_id列因此模棱两可 -
@j-dexx 我们如何避免这种情况并在 rails activerecord 方法中使用表名?
-
看起来可能只是最后的顺序,rails 将默认按驱动程序的 id 进行排序,因为您正在查询驱动程序,因此您可能只能删除 order 子句
标签: mysql ruby-on-rails join activerecord activeadmin