Ruby on rails 如何使查询适应rails
我正在尝试将一个查询改编为RubyonRails,在查询中有一个子查询,其中包含一个from,我不知道如何将其改编为rails。原始查询如下:Ruby on rails 如何使查询适应rails,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在尝试将一个查询改编为RubyonRails,在查询中有一个子查询,其中包含一个from,我不知道如何将其改编为rails。原始查询如下: SELECT B.Codigo, C.NombreCorto, B.Descripcion, B.HI, B.latitude, B.longitude, C.Direccion, ISNULL((SELECT SUM(TOTAL) FROM Venta WHERE RutaId=B.RutaId AND DiaO=B.DiaO AND CodCli
SELECT B.Codigo, C.NombreCorto, B.Descripcion, B.HI, B.latitude, B.longitude, C.Direccion, ISNULL((SELECT SUM(TOTAL)
FROM Venta
WHERE RutaId=B.RutaId AND DiaO=B.DiaO AND CodCliente=B.Codigo AND Cancelada='0' AND TOTAL>0),0) AS TOTAL
FROM BitacoraTiempos B LEFT JOIN Clientes C ON C.IdCli=B.Codigo
WHERE B.RutaId='161' AND B.DiaO='893'
ORDER by B.HI
这就是我迄今为止所适应的:
def self.search_gps_venta(params)
query = select('[bitacoratiempos].Codigo,[bitacoratiempos].RutaId,[bitacoratiempos].Descripcion,[bitacoratiempos].HI,[bitacoratiempos].latitude,[clientes].NombreCorto AS c_nombre,[clientes].Direccion AS c_direccion')
.joins('left join clientes ON bitacoratiempos.Codigo=clientes.IdCli')
.where("(bitacoratiempos.RutaId = :rutaId or :rutaId = '') AND (bitacoratiempos.DiaO = :diaO or :diaO = '') AND (bitacoratiempos.IdEmpresa = :idempresa)",{rutaId: params[:search], diaO: params[:diaO]})
query
end
在控制器中,我这样称呼它:
def busqueda_gps_venta
@ventas = Bitacoratiempo.search_gps_venta(params)
respond_to do |format|
format.js
end
end
如何在rails查询中包含原始查询的这一部分:
SELECT B.Codigo, C.NombreCorto, B.Descripcion, B.HI, B.latitude, B.longitude, C.Direccion, ISNULL((SELECT SUM(TOTAL)
FROM Venta
WHERE RutaId=B.RutaId AND DiaO=B.DiaO AND CodCliente=B.Codigo AND Cancelada='0' AND TOTAL>0),0) AS TOTAL
首先,我注意到你的改编。。。实际上与原始SQL的查询不完全相同-这会让人感到困惑,并且更难找到帮助您的方法-其中有一个组在原始查询中不存在,并且有更多的where条件。。。您是否以某种方式将查询与子查询弄乱了?你不应该这么做。您的rails查询将具有与原始查询相同的结构(大致相同)…第二:看看这个查询是否可以帮助您:@TarynEast谢谢您的回答。对不起,我已经更新了我的帖子。我的问题是,在原始查询中有一个子查询,其中一个“FROM”包含到另一个名为“Venta”的表中,我该如何做?有什么方法可以在rails中使用原始查询而不进行修改吗?是的。。。看看我链接到的另一个问题的答案。另外,您可以将SQL的大字符串传递给rails。。。