Rails - 尝试从日期范围查询......从今天起的所有内容

时间:2010-04-26 21:05:56

标签: ruby-on-rails date range

我正试图找出从rails查询日期范围的最佳方式...我在Google上查看但不确定如何使用此语法。

我有一个包含各种事件的模型,我想在我的查找条件中添加一个警告,该警告应该只显示字段:st_date是今天或更晚的事件,实际上只显示当前数据,没有发生任何事情在今天之前。

我遇到了一个问题,因为我没有结束日期来停止查询,我想查询从今天到下个月的所有内容。

我在想像

这样的东西
 @events = Event.find(:all, :conditions => ["start_date between ? and ?",
         date.Today, date.next_month.beginning_of_month])

但是我得到错误未定义的局部变量或方法`date'......

我是否需要做任何特别的事情才能使用Date类?或者我的查询语法有问题吗?我真的很感激任何帮助。

4 个答案:

答案 0 :(得分:16)

你想要Date.today,而不是date.today。你正在做的事情没有错,你只是没有正确引用日期类

此外,它将是Date.today.next_month.beginning_of_month

答案 1 :(得分:14)

我会更进一步,在模型中定义一个范围以供重用。

# rails 3 example:
# app/models/event.rb
scope :upcoming, lambda {
  where("start_date between ? and ?", Date.today, Date.today.next_month.beginning_of_month)
}

# app/controllers/some_controller.rb
@events = Event.upcoming

Rails 3中的范围也有一个很棒的Railscasts插曲:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

答案 2 :(得分:6)

Event.where(:start_date => Date.today..Date.today.next_month.beginning_of_month)也很有用。

答案 3 :(得分:1)

查看我的by_star插件,它可以让您执行以下操作:

Event.by_month(Time.now, :field => "start_date")