У меня есть sql
запрос с несколькими слева присоединяется, который работает отлично:Преобразование SQL-запрос к Rails ActiveRecord запроса
query = <<-eos
select date(t.completed_at) completed_date, s.id district, assignee_id, u.first_name, u.last_name, count(t.id) completed_tasks
from tasks t
left join tickets k on k.id = t.ticket_id
left join installations i on i.id = k.installation_id
left join administrative_areas a on i.ward_id = a.id
left join service_areas s on s.id = a.service_district_id
left join users u on u.id = t.assignee_id
where 1 = 1
and s.id = '#{district_id}'
and t.status = '#{status}'
and t.kind = 1
and t.completed_at >= '#{days_ago.days.ago.beginning_of_day.to_s(:db)}'
and t.completed_at <= '#{days_until.days.ago.beginning_of_day.to_s(:db)}'
group by date(t.completed_at), s.id, s.name, u.first_name, u.last_name, t.assignee_id
eos
Я получил это значение после отображения: [{:completed_date=>"2015-07-11", :district=>"1339", :assignee_id=>"215371", :assignee_name=>nil, :first_name=>"John_9", :last_name=>"Ant", :completed_tasks=>"1"}]
для sql
запроса.
Но я хочу, чтобы прекратить использование sql
запроса и перейти на ActiveRecord
запрос и я конвертацию в ActiveRecord
так:
Task.joins("LEFT JOIN tickets k ON k.id = tasks.ticket_id").
joins("LEFT JOIN installations i ON i.id = k.installation_id").
joins("LEFT JOIN administrative_areas a ON i.ward_id = a.id").
joins("LEFT JOIN service_areas s ON s.id = a.service_district_id").
joins("LEFT JOIN users u ON u.id = tasks.assignee_id").
where(["s.id = ? and tasks.status = ? and tasks.kind = ? and tasks.completed_at >= ? and tasks.completed_at <= ?", 26, "#{status}", 1, "#{days_ago.days.ago.beginning_of_day.to_s(:db)}", "#{days_until.days.ago.beginning_of_day.to_s(:db)}"]).
select('date(tasks.completed_at) as completed_date, s.id as district, assignee_id, u.first_name, u.last_name, count(tasks.id) as completed_tasks').
group("date(tasks.completed_at), s.id, s.name, u.first_name, u.last_name, tasks.assignee_id")
Но проблема, я здесь пытается сделать select
из нескольких столбцов в разных таблицах единственное значение, возвращаемое запросом ActiveRecord
, принадлежит только таблице задач. Я не знаю, что я делаю неправильно, может быть, это left joins
или select
[#<Task status: 1, assignee_id: 215356, kind: 1>]
Пожалуйста, как преобразовать вышеупомянутую sql
запрос ActiveRecord
запрос и получить тот же результат?
Спасибо за вашу помощь, это не сработало для меня. 'Task.joins (: билеты, установки:: administrator_areas ...)' именно то, что я хочу преобразовать запрос. – CallmeSurge
Попробуйте использовать .to_sql в представлении запроса ActiveRecord и сравнить со старым оператором SQL ... –