在实例或类方法中使用Time.zone.now.to_date?

时间:2012-04-18 07:59:15

标签: ruby-on-rails

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

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) }

我是否需要针对类或实例方法执行类似的操作?如果是这样,究竟是什么?

1 个答案:

答案 0 :(得分:1)

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

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