Activerecord -返回所有记录与子日期的数组中的每个日期?



我有以下表格:

class Contract
has_many :working_days
end
Class WorkingDay
belongs_to :contract
end

working_days表中有一个date字段

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

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

尽可能快,并在一个Activerecord或SQL查询,我怎么能返回所有合同有一个工作日的所有dates数组内的日期?

我希望这是尽可能快的,所以我不想循环日期数组和运行多个查询。

如果可以从dates_arraymap可以在Activerecord查询中运行的SQL查询,那就可以了。比如:

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

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

在一个查询中,有人知道我如何返回所有合同,有一个工作日的所有日期数组内的日期?

感谢任何可以帮助你的人!

您可以获得所有具有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)