在这里,我有一个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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句