Select 基于日期范围的对象
Select object based on date range
技术规格:ruby 2.1.5p273,Rails 4.2.3.
我有一组天数,我想遍历这些天数以选择日期范围内的正确退出(模型)。
@exits 有:start_date 和:end_date
@days 是一组日期,例如:
=> [2015年9月6日星期日,2015年9月12日星期六,2015年9月15日星期二,2015年9月18日星期五,2015年9月19日星期六,2015年9月20日星期日,2015年9月23日星期三]
我认为这样的方法可行:
@days.each do |day|
@exits.where(:start_date..:end_date).include?(day)
end
但是我得到一个错误:
TypeError: Cannot visit Range
通过将对象与单个日期进行比较来查询具有日期范围(在两个字段之间)的对象的最佳方法是什么?谢谢!
Exit.where(day: @exit.start_date..@exits.end_date)
or
Exit.where('day >= ? AND day <= ?', @exit.start_date, @exits.end_date)
在循环中执行 SQL 查询可能不是一个好主意,它可以重构为最有可能的一次调用。这应该发生在控制器而不是视图中。
您可以使用以下内容:
@days.each do |day|
exits = Exit.where('? BETWEEN start_date AND end_date', day)
# etc.
end
如果你不想遍历它们,那么你可以这样做:
Event.where("start_date IN (:days) AND end_date IN (:days)", { days: @days })
或
Event.where(start_date: @days, end_date: @days)
技术规格:ruby 2.1.5p273,Rails 4.2.3.
我有一组天数,我想遍历这些天数以选择日期范围内的正确退出(模型)。
@exits 有:start_date 和:end_date
@days 是一组日期,例如:
=> [2015年9月6日星期日,2015年9月12日星期六,2015年9月15日星期二,2015年9月18日星期五,2015年9月19日星期六,2015年9月20日星期日,2015年9月23日星期三]
我认为这样的方法可行:
@days.each do |day|
@exits.where(:start_date..:end_date).include?(day)
end
但是我得到一个错误:
TypeError: Cannot visit Range
通过将对象与单个日期进行比较来查询具有日期范围(在两个字段之间)的对象的最佳方法是什么?谢谢!
Exit.where(day: @exit.start_date..@exits.end_date)
or
Exit.where('day >= ? AND day <= ?', @exit.start_date, @exits.end_date)
在循环中执行 SQL 查询可能不是一个好主意,它可以重构为最有可能的一次调用。这应该发生在控制器而不是视图中。
您可以使用以下内容:
@days.each do |day|
exits = Exit.where('? BETWEEN start_date AND end_date', day)
# etc.
end
如果你不想遍历它们,那么你可以这样做:
Event.where("start_date IN (:days) AND end_date IN (:days)", { days: @days })
或
Event.where(start_date: @days, end_date: @days)