如果我在关联上定义的类方法中有以下代码。那个值会被缓存还是只适用于范围?
def for_today
where 'planned_for = ?', Time.zone.now
end
为了澄清,如果我使用范围执行以下操作,则Time.zone.now值将与缓存类时相同,并且我想确保上述情况不会发生这种情况或如何解决它
scope :for_today, where('planned_for = ?', Time.zone.now)
因此,编写使用动态值的范围的正确方法是使用类似
的lambdascope :for_today, lambda { where('planned_for = ?', Time.zone.now) }
我是否需要针对类或实例方法执行类似的操作?如果是这样,究竟是什么?
答案 0 :(得分:1)
不,该值不会被缓存用于类和实例方法,因此您可以安全地使用它们。
作为一个经验法则:对于简单条件使用scope
,对于更复杂的情况,使用类方法。
此外,使用默认配置,存储在数据库中的所有时间都是UTC,因此您可以使用Time.now,因为它将自动转换为UTC。