Rails 3 - 用模型方法选择?

时间:2011-08-03 19:50:28

标签: ruby-on-rails ruby-on-rails-3

目前,在我的控制器中,我将值赋给变量,如下所示:

@tasks = @list.tasks.where(:importance => 'high', :active => true).search(params[:search])

我想知道的是,是否存在使用.where或任何其他方式使用模型方法进行选择的方法。我有一个模型方法,它返回一个表示相对截止日期的字符串:

def due
    if self.due_date < Date.today + 2.days
      return 'now'
    elsif self.due_date < Date.today + 1.week
      return 'soon'
    else
      return 'later'
    end    
end

我不想将这个.due值存储在数据库中,因为它会根据日期不断变化。但是理论上我想要做的就是在我的控制器中进行选择:

@tasks = @list.tasks.where(:importance => 'high', :active => true, :due => 'now).search(params[:search])

但是这不起作用,因为.due不在数据库中。我应该用范围做这个吗?无论如何,感谢帮助。

1 个答案:

答案 0 :(得分:2)

你可以做范围:

scope :due_now, lambda { where("due_date < ?", Date.today + 2.days) }
scope :due_soon, lambda { where("due_date < ?", Date.today + 1.week) }
scope :due_later, lambda { where("due_date >= ?", Date.today + 1.week) }

或者,你可以像这样使用你的类方法:

@tasks = @list.tasks.where(:importance => 'high', :active => true).select{ |task| task.due == 'now' }.search(params[:search])