我在选择订单时遇到问题。它不起作用。查询:
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)
任何帮助都是适当的。
答案 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)