【问题标题】:Do Rails model methods need to be wrapped in lambdas like scopes?Rails 模型方法是否需要像作用域一样包装在 lambda 中?
【发布时间】:2013-07-18 17:06:35
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails date proc


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 2022-11-06
      • 2014-11-17
      相关资源
      最近更新 更多