0

如果我在关联上定义的类方法中有以下代码。然后该值会被缓存还是仅适用于范围?

def for_today
  where 'planned_for = ?', Time.zone.now
end

为了澄清,如果我使用范围执行以下操作, Time.zone.now 值将与缓存类时的值相同,我想确保上述情况不会发生或如何解决它。

scope :for_today, where('planned_for = ?', Time.zone.now)

因此,编写使用动态值的范围的正确方法是使用 lambda

scope :for_today, lambda { where('planned_for = ?', Time.zone.now) }

我是否需要为类或实例方法做类似的事情,如果是这样,那到底是什么?

4

1 回答 1

1

不,该值不会为类和实例方法缓存,因此您可以安全地使用它们。根据经验:对于简单的条件使用scope,对于更复杂的情况,使用类方法。

此外,在默认配置下,存储在数据库中的所有时间都是 UTC,因此您可以使用 Time.now,因为它将自动转换为 UTC。

于 2012-04-18T08:25:45.233 回答