在查找条件中多次使用相同的参数:hash

时间:2009-12-29 11:40:01

标签: ruby-on-rails find dry

我有一个拥有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上。

2 个答案:

答案 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)]} }