Ruby on rails Rails模型方法是否需要像lambdas一样封装在作用域中?

Ruby on rails Rails模型方法是否需要像lambdas一样封装在作用域中?,ruby-on-rails,date,proc,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:

我知道如果我在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

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