Это позволяет объединить вложенный подзапрос select с Arel:
Вы можете добавить вложенный inner_query и external_query в файл модели и использовать ...
inner_query = Model.inner_query(params)
result = Model.outer_query(params).joins(Arel.sql("(#{inner_query.to_sql})"))
.group("...")
.order("...")
Для вариантовдля этого, например, чтобы использовать INNER JOIN в подзапросе, выполните следующие действия:
inner_query = Model.inner_query(params)
result = Model.outer_query(params).joins(Arel.sql("INNER JOIN (#{inner_query.to_sql}) tablealias ON a.id = b.id"))
.group("...")
.order("...")
Добавьте в конкретные объединения, ограничения и группировки к каждой из областей запросов для дальнейшего изменения оператора sql, т. е.
scope :inner_query , -> (company_id, name) {
select("...")
.joins("left join table1 on table1.id = table2.id")
.where("table1.company_id = ? and table1.name in (?)", company_id, name)
.group("...")
}
Это позволяет вам ставить условия WHERE для вложенного запроса, а также для внешнего запроса