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)
我有以下 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)