Вероятно, самый простой способ адаптировать ваш запрос к рельсам - это использовать метод find_by_sql
. Это выглядит так:
Model.find_by_sql
Так что перевод вашего запроса может выглядеть примерно так.
Client.find_by_sql("
SELECT Sum(DV.importe + DV.iva)
FROM venta
INNER JOIN detallevet DV
ON DV.rutaid = [venta].rutaid
AND DV.idempresa = [venta].idempresa
AND DV.docto = [venta].documento
WHERE venta.rutaid = 8
AND diao = 611
AND venta.tipovta = 'Contado'
UNION ALL
SELECT Sum(DP.importe + DP.iva)
FROM pedidosliberados PL
INNER JOIN detallepedidoliberado DP
ON PL.pedido = DP.pedido
AND PL.ruta = DP.ruta
AND PL.idempresa = DP.idempresa
WHERE PL.cancelada = 0
AND PL.status = 5
AND PL.tipo = 'Contado'
AND PL.ruta = 8
AND PL.diao_entrega = 611
")
# => [<Client id: 1, sum: 22 >, <Client id: 2, sum: 44>...]
В качестве альтернативы, если у вас нет модели и вы просто хотите выполнить сырой SQL, ActiveRecord имеет удобную вспомогательную функцию с именем execute
.
sql = "Select * from ... your sql query here"
records_array = ActiveRecord::Base.connection.execute(sql)
Ссылка здесь .