我想在rails中使用查询,如:

时间:2017-11-28 12:17:34

标签: ruby-on-rails

我在选择订单时遇到问题。它不起作用。查询:

Order.select("order_at BETWEEN ? AND ?","#{Time.now}","#{Time.now - 20.day}")

我面临的问题是我还有其他一些东西。

Order.joins('left joing with some association').group('orders.id').select("SUM(CASE WHEN association.created_at BETWEEN '#{Time.now.utc}' AND '#{(Time.now - 20days).utc}' THEN association.quantity ELSE 0 END) as total_qty")

现在我希望将此Time.now.utc作为外部参数传递,如此

Order.select(" order_at BETWEEN?AND?","#{Time.now}","#{Time.now - 20.day} &#34)

任何帮助都是适当的。

2 个答案:

答案 0 :(得分:1)

如果你想在Ruby中进行插值,你需要双引号:

string = 'Hey'
puts "#{string} you" # "Hey you"

适用于字符串,但您不需要将Time对象包装在引号中,也不需要将其转换为字符串。

而使用select,它只从查询中指定的模型(表)中选择某些属性(列),你应该使用where,并注意查询中日期的顺序:

Order.where('created_at BETWEEN ? AND ?', Time.now, Time.now - 20.days)

答案 1 :(得分:0)

在这种情况下,您想要尝试的是find_by_sql方法。 select方法仅负责SELECT查询参数。将代码重写为:

Order.find_by_sql("order_at BETWEEN ? AND ?",'#{Time.now}','#{Time.now - 20.day}')

这应该有效

PS:但这对ActiveRecord来说不是一个好的解决方案。您也可以这样做:

Order.where(order_at: (Time.now - 20.days)...Time.now)