首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将日期参数传递给rails中的select查询(QueryMethods)

将日期参数传递给rails中的select查询(QueryMethods)
EN

Stack Overflow用户
提问于 2017-11-29 03:46:32
回答 2查看 962关注 0票数 0

我正在使用brakeman (它识别Rails代码中可能存在的安全问题)。我们有一个使用联接、组和select的范围,我需要更新查询的select部分。此范围如下所示。我把范围的内容放在产品模型上。

代码语言:javascript
复制
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.*"
  )

现在,如果我试图像这样更改查询

代码语言:javascript
复制
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在?然后呢?和奥德

EN

Stack Overflow用户

发布于 2017-11-29 04:20:12

我相信您也可以用where子句删除CASE语句:

检出范围条件

代码语言:javascript
复制
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.*")
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47544721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档