这里我有一个 Order 和 OrderReport 表。我正在对其进行连接,从每个表中提取一些数据。
OrderReport.joins("INNER JOIN orders on orders.id = order_reports.for_object_id and order_reports.for_object_type = 'Order'").
group("order_reports.sales_user_id, EXTRACT(MONTH from event_at), orders.user_id,event_at").
pluck("order_reports.sales_user_id, EXTRACT(MONTH from event_at), orders.user_id,sum((cached_user_total_due - cached_sales_tax) * split_percentage), min(event_at)")
我有一个很长的 sql + ActiveRecord 查询。我想添加一个初始值设定项,并让它接受日期开始和日期结束,以使其更加灵活,以便能够提取上一年的报告。
开始和结束日期将来自具有 event_at 列的 Order 表。我知道我会从这样做开始:
attr_reader :start_date, :end_date
def initialize(start_date:, end_date:)
@start_date = start_date
@end_date = end_date
end
最佳答案
您可以通过定义如下范围来简单地实现此目的:
class OrderReport < ActiveRecord::Base
scope :during, -> (start, end) {
where('event_at >= ? AND event_at <=?', start, end)
}
end
然后你就可以非常简单地进行查询:
OrderReport.during(start_date, end_date).joins(pla pla pla)
关于sql - 将日期范围参数传递给 Rails 中的 SQL/ActiveRecord 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35553875/