我有一个具有开始日期和结束日期的对象,以表示对象有效的时间。 给定日期,是否有办法只选择那些包含日期的有效范围的对象?
我试过在中间摆弄,但无法正确理解语法。
谢谢!
答案 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])