如何为 rails(使用 has_scope)编写一个范围,以查找在两个给定日期(start_date 和 end_date)之间具有 created_at 日期的订单

How to write a scope for rails (using has_scope) that finds orders that has a created_at date between two given dates(start_date & end_date)

我有一个当前范围不工作。

但确实解释了我要实现的目标。

  scope :range, -> (start_date, end_date) { where("orders.created_at BETWEEN (?) AND (?)", start_date.to_date, end_date.to_date)}

我正在寻找一种方法来获取两个给定日期之间的所有订单。

我提供的参数是正确的。

http://localhost:3000/api/v1/reports/organisations/1/sales-reports?range[start_date]=2020-12-27&range[end_date]=2020-12-28

对于适用于我的用例的范围的任何帮助将不胜感激。

事实证明,因为我正在使用 has_scope gem。

我所需要的只是使用 'using' 选项。

has_scope :range, using: %i[start_date end_date], type: :hash

我考虑的是标准,您使用 orders.created_at 而不仅仅是 created_at 来确定范围。

此外,这使得 ActiveRecord 负责编写 SQL 而不是您自己。

scope :range, ->(start_date, end_date) { where(created_at: start_date.to_date..end_date.to_date) }

另外,我会尝试将 start_dateend_date 作为日期传递,因为您说的是日期,而不是日期的字符串表示形式。