选择给定日期在:开始日期和结束日期之间的表条目

时间:2010-01-21 15:12:58

标签: ruby-on-rails

我有一个具有开始日期和结束日期的对象,以表示对象有效的时间。 给定日期,是否有办法只选择那些包含日期的有效范围的对象?

我试过在中间摆弄,但无法正确理解语法。

谢谢!

3 个答案:

答案 0 :(得分:1)

这通常使用命名范围来实现,该范围执行适当的限制,以识别当前时间点可见的记录:

class MyRecord < ActiveRecord::Base
  named_scope :visible,
    :conditions => 'visible_from<=UTC_TIMESTAMP() AND visible_to>=UTC_TIMESTAMP'
end

这可以更改为使用占位符更多任意日期:

class MyRecord < ActiveRecord::Base
  named_scope :visible_at, lambda { |date| {
    :conditions => [
      'visible_from<=? AND visible_to>=?',
      date, date
    ]
  }}
end

据推测,您的日期存储为UTC,因为为了显示目的,从一个本地时间转换为另一个时间是非常麻烦的。

您可以选择所有可见的模型:

@records = MyRecord.visible.all
@records = MyRecord.visible_at(2.weeks.from_now)

答案 1 :(得分:0)

如果您是为“given_date”执行此操作。

select *
from table
where start_date <= given_date
and end_date >= given_date

答案 2 :(得分:0)

这是你使用活动记录的方式。

Foo.find(:all, :conditions => ['valid_from <= ? and valid_to >= ?', valid_date, valid_date])