我有一个拥有2个属性的模型:valid_from和valid_to。
我需要选择当前有效的所有实例,即valid_from< = today和valid_to> = today。
我有以下发现:
Mymodel.find(:all, :conditions => ["valid_from <= ? and valid_to >= ?", Date.today, Date.today])
我已经考虑过将Date.today存储在变量中并调用该变量,但我仍然需要调用它两次。
my_date = Date.today
Mymodel.find(:all, :conditions => ["valid_from <= ? and valid_to >= ?", my_date, my_date])
有没有办法改进并只对变量进行一次调用以匹配所有“?”在:条件?
感谢, P上。
答案 0 :(得分:1)
我会使用named_scope
。在模型中添加:
named_scope :valid,
:conditions =>
["valid_from <= ? and valid_to >= ?", Date.today, Date.today]
然后在您的控制器中,您可以致电:
@mymodels = Mymodel.valid
我认为专注于将对Date.today的两次调用减少到只有一次调用是浪费时间。它不会使您的应用程序更快或使用更少的内存。
答案 1 :(得分:1)
我不知道如何做你所要求的,但即使你能,我也不认为它会给你带来太大的收获。我会在你的模型类中创建一个named scope。
在此示例中,您可以将日期传递给指定范围,或者如果未指定日期,则默认为今天的日期:
named_scope :by_valid_date, lambda { |*args|
{ :conditions => ["valid_from <= ? and valid_to >= ?",
(args.first || Date.today), (args.first || Date.today)]} }