Activerecord - Return 日期数组中每个日期的所有包含子项的记录?

Activerecord - Return all records with children for every date within an array of dates?

我有以下 tables:

class Contract
  has_many :working_days
end

Class WorkingDay
  belongs_to :contract
end

working_days table 有一个 date 字段。

我还有一个日期数组,例如:

dates_array = [Date.today, Date.today + 1.week, Date.today + 2.weeks, Date.today + 3.weeks, Date.today + 4.weeks]

尽可能快,并且在一个 Activerecord 或 SQL 查询中,我如何 return 所有有 all 工作日的合同dates 数组中的日期?

我希望它尽可能快,所以我不想遍历日期数组和 运行 多个查询。

如果有可能 map 来自 dates_array 的 SQL 查询可能是 Activerecord 查询中的 运行,那就没问题了。类似于:

Contract.joins(:working_days).where(working_days: dates_array.map { |date| "('date=?','#{date}') #{'OR' unless date == dates_array.last}" }.join(''))

但是这段代码不起作用,到目前为止,除了循环日期数组(太慢)之外,我还没有想出任何有用的东西。

在一个查询中,有谁知道我如何 return 所有合同的工作日为日期数组中的 所有 个日期?

感谢任何能提供帮助的人!

您可以获得所有具有 working_days 的合同记录,其中 working_days 恰好具有 dates_array 持有的那些日期,其中 working_days 的总数恰好是dates_array 中相同数量的元素,同时按 id 对合同行进行分组:

Contract
  .joins(:working_days)
  .where(working_days: { date: dates_array })
  .group(:id)
  .having('COUNT(*) = ?', dates_array.size)