sql - 将日期范围参数传递给 Rails 中的 SQL/ActiveRecord 查询

标签 sql ruby-on-rails ruby ruby-on-rails-4 activerecord

这里我有一个 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/

相关文章:

php - MySQL数据库xampp

sql - Concat 函数不起作用 - 参数数量无效

sql - 计算字符串中实例的数量

ruby-on-rails - 无法推送到 Heroku:Sprockets::FileNotFound:找不到 application.css

ruby-on-rails - rails : class' object_id changes after I make a request

java - 如何使用java运行mysql存储过程

ruby-on-rails - 如何在 Rails 3 中使用 i18n 键作为默认翻译?

Ruby - 救援后如何检查特定异常?

ruby - 如何使用 Nokogiri 从图像标签中抓取文本?

mysql - 将生产数据的子集迁移回开发