根据日期范围选择对象

时间:2015-09-24 14:41:45

标签: ruby-on-rails ruby 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

通过将具有日期范围(在两个字段之间)的对象与单个日期进行比较,查询具有日期范围的对象的最佳方法是什么?谢谢!

3 个答案:

答案 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查询可能是一个坏主意,它可能被重构为最有可能是一个调用。这应该发生在不在视图中的控制器中。