Кто-нибудь знает, как изменить этот sql-запрос на ruby on rails? Здесь объединяются 4 таблицы и используются подзапросы, сгруппированные по и упорядоченные по.
subquery = ProjectMilestoneReportStatus
.group('project_milestone_id')
.select('project_milestone_id, max(created_at) as created_at')
ProjectMilestone.joins([:milestone, :project_milestone_report_statuses])
.joins("INNER JOIN (#{subquery.to_sql}) AS grouped_status on
project_milestone_report_statuses.project_milestone_id =
grouped_status.project_milestone_id
and project_milestone_report_statuses.created_at =
grouped_status.created_at")
.where(project_id: project_id)
.select('milestones.id, milestones.name,
project_milestone_report_statuses.status,
project_milestones.milestone_end_date, project_milestones.id as
project_milestone_id')
.order('project_milestone_report_statuses.created_at DESC')
Рассматриваемые классы:
class Milestone < ActiveRecord::Base
has_many :project_milestones
end
class ProjectMilestone < ActiveRecord::Base
belongs_to :milestone
belongs_to :project
has_many :project_milestone_report_statuses
end
class ProjectMilestoneReportStatus < ApplicationRecord
belongs_to :project_milestone
end