我正在使用brakeman (它识别Rails代码中可能存在的安全问题)。我们有一个使用联接、组和select的范围,我需要更新查询的select部分。此范围如下所示。我把范围的内容放在产品模型上。
Product.joins('LEFT JOIN orders ON orders.product_id = products.id')
.group('products.id')
.select(
"SUM(CASE WHEN orders.order_at BETWEEN '#{start_date}' AND '#{end_date}'" \
" THEN orders.qty ELSE 0 END) as qty, products.*"
)现在,如果我试图像这样更改查询
Product.joins('LEFT JOIN orders ON orders.product_id = products.id')
.group('products.id')
.select(
"SUM(CASE WHEN orders.order_at BETWEEN ? AND ?" \
" THEN orders.qty ELSE 0 END) as qty, products.*",
'#{start_date}',
'#{end_date}'
)它给我语法错误的地方,我有?,我也尝试了一些其他方式,并有,但它没有对我起作用。我在rails 4.1.8中使用postgres
他们有办法让我做到这一点吗?提前谢谢。
这是错误
语法错误:错误:语法错误在或接近"?“ 第1行:选择SUM(当orders.order_at在?然后呢?和奥德
发布于 2017-11-29 04:20:12
我相信您也可以用where子句删除CASE语句:
检出范围条件
Product
.joins('LEFT JOIN orders ON orders.product_id = products.id')
.where(orders: {order_at: start_date..end_date}) # range condition
.group('products.id')
.select("SUM(orders.qty) as qty, products.*")https://stackoverflow.com/questions/47544721
复制相似问题