我正试图找出从rails查询日期范围的最佳方式...我在Google上查看但不确定如何使用此语法。
我有一个包含各种事件的模型,我想在我的查找条件中添加一个警告,该警告应该只显示字段:st_date是今天或更晚的事件,实际上只显示当前数据,没有发生任何事情在今天之前。
我遇到了一个问题,因为我没有结束日期来停止查询,我想查询从今天到下个月的所有内容。
我在想像
这样的东西 @events = Event.find(:all, :conditions => ["start_date between ? and ?",
date.Today, date.next_month.beginning_of_month])
但是我得到错误未定义的局部变量或方法`date'......
我是否需要做任何特别的事情才能使用Date类?或者我的查询语法有问题吗?我真的很感激任何帮助。
答案 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")