【问题标题】:I want to use query in rails just like:我想在 Rails 中使用查询,就像:
【发布时间】:2017-11-28 12:17:34
【问题描述】:

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

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}")

如有任何帮助,我们将不胜感激。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    在这种情况下你想尝试的是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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2022-10-04
      • 2018-01-19
      • 1970-01-01
      • 2011-06-09
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多