我正在构建一个查询,但我需要将我发送的参数传递给要在查询中使用的模型,问题是我无法使查询接受select中的参数,这是我的查询:
def self.reporte_inventario_total(params)
query = select("(SELECT Ruta FROM Rutas WHERE IdRutas = :rutaId or :rutaId = '') AS Ruta,
ISNULL((SELECT S.Stock/PP.PzaXCja AS INT FROM stockhistorico S LEFT JOIN ProductosXPzas PP ON S.Articulo=PP.Producto WHERE S.Articulo=Productos.Clave AND S.RutaId = :rutaId or :rutaId = '' AND fecha = :fechaDiaO or :fechaDiaO = ''),0) AS StockCajas,
ISNULL((SELECT S.Stock%PP.PzaXCja AS INT FROM stockhistorico S LEFT JOIN ProductosXPzas PP ON S.Articulo=PP.Producto WHERE S.Articulo=Productos.Clave AND S.RutaId = :rutaId or :rutaId = '' AND fecha = :fechaDiaO or :fechaDiaO = ''),0) AS StockPiezas,
Productos.Clave, Productos.Producto, Productos.CodBarras,Productos.Sector", ({rutaId: params[:search],fechaDiaO: params[:fechaDiaO]}))
end
这是我得到的错误
unsupported: Hash
答案 0 :(得分:2)
您的问题是,与select
方法不同的where
方法需要使用普通字符串作为参数,但不允许使用?
和:variable
占位符。
要使用:rutaId
之类的表达式,您需要通过调用sanitize_sql_array
来包装选择查询。
假设reporte_inventario_total
是某个ActiveRecord::Base
子类的方法:
query_string = "SELECT Ruta FROM Rutas WHERE IdRutas = :rutaId or :rutaId ..."
query = select(sanitize_sql_array([query_string, rutaId: params[:search], fechaDiaO: params[:fechaDiaO]))
如果reporte_inventario_total
是在某个ActiveRecord::Base
子类之外写的,那么您需要将sanitize_sql_array(...)
替换为ActiveRecord::Base.send(:sanitize_sql_array, ...)
之类的内容,因为该方法是私有的,并且是仅用于模型。