jef*_*eff 3 ruby sql ruby-on-rails ruby-on-rails-4 rails-activerecord
我正在构建一个查询,但我需要将我发送的参数传递给要在查询中使用的模型,问题是我无法让查询接受选择中的参数,这是我的查询:
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
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
unsupported: Hash
Run Code Online (Sandbox Code Playgroud)
您的问题是与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]))
Run Code Online (Sandbox Code Playgroud)
如果reporte_inventario_total是在某个ActiveRecord::Base子类之外编写的,那么您需要替换sanitize_sql_array(...)为类似的内容ActiveRecord::Base.send(:sanitize_sql_array, ...),因为该方法是私有的并且仅用于模型中。
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |