Rails模型方法是否需要像范围一样包含在lambda中?

时间:2013-07-18 17:06:36

标签: ruby-on-rails date proc

我知道如果我在Rails模型中使用作用域方法,我应该将查询存储在proc对象中,以便在我调用它时进行评估,而不是在应用程序启动时进行评估。例如:

scope :shifts_last_week, -> { where(date: (Date.today - 7)..(Date.today)) }

同一模型中的类方法是否需要相同的过程?这些方法是否在发布时以相同的方式进行评估,或者我可以如下定义方法?

def self.shifts_this_week
  where( date: (Date.today.beginning_of_week(WEEK_START))..(Date.today + 1) )
end

1 个答案:

答案 0 :(得分:1)

答案是您不必为类方法定义执行相同的lambda包装,这只在调用方法本身时执行。运行应用程序时执行作用域的原因是作用域本身是一个方法,它最终调用'where'子句(而不仅仅是一个方法定义)。方法定义本身在调用它们定义的方法之前不会执行。