技术规格: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
通过将具有日期范围(在两个字段之间)的对象与单个日期进行比较,查询具有日期范围的对象的最佳方法是什么?谢谢!
答案 0 :(得分:2)
您可以使用以下内容:
@days.each do |day|
exits = Exit.where('? BETWEEN start_date AND end_date', day)
# etc.
end
答案 1 :(得分:0)
如果你不想循环它们,那么你可以这样做:
Event.where("start_date IN (:days) AND end_date IN (:days)", { days: @days })
或
Event.where(start_date: @days, end_date: @days)
答案 2 :(得分:-1)
Exit.where(day: @exit.start_date..@exits.end_date)
or
Exit.where('day >= ? AND day <= ?', @exit.start_date, @exits.end_date)
在循环中执行SQL查询可能是一个坏主意,它可能被重构为最有可能是一个调用。这应该发生在不在视图中的控制器中。