gpt4 book ai didi

ruby-on-rails-3 - Rails 用另一列覆盖 updated_at 以获得正确的 cache_key

转载 作者:行者123 更新时间:2023-12-05 07:59:31 26 4
gpt4 key购买 nike

我正在使用 Rails 3.2.13。我们使用 last_modified_time 作为我们最后更新的列。我的问题是,当我执行 model.cache_key 时,它没有考虑 :last_modifed_time 列。

Rails 中的当前(Rails 3.2.13)实现:

# Returns a cache key that can be used to identify this record.
#
# ==== Examples
#
# Product.new.cache_key # => "products/new"
# Product.find(5).cache_key # => "products/5" (updated_at not available)
# Person.find(5).cache_key # => "people/5-20071224150000" (updated_at available)
def cache_key
debugger
case
when new_record?
"#{self.class.model_name.cache_key}/new"
when timestamp = self[:updated_at]
timestamp = timestamp.utc.to_s(cache_timestamp_format)
"#{self.class.model_name.cache_key}/#{id}-#{timestamp}"
else
"#{self.class.model_name.cache_key}/#{id}"
end
end

我像这样在我的模型中覆盖它:

def cache_key
updated_at = self[:updated_at]

if self.last_modified_time && !updated_at
timestamp = self.last_modified_time.utc.to_s(cache_timestamp_format)
"#{super}-#{timestamp}"
end
end

我的问题是:是否有更简单的方法来覆盖 :updated_at 以获得正确的 cache_key ?

最佳答案

我刚遇到同样的问题。这不一定更简单,但是如果您打算升级到 Rails 4,您可以简单地在模型中覆盖此方法:

private
def timestamp_attributes_for_update
super << :last_modifed_time
end

不幸的是,正如您所发现的,由于 Rails 3 硬编码了 cache_key 中的 :updated_at 值,因此该解决方案不起作用。然而,这在 Rails 4 中得到了修复。

关于ruby-on-rails-3 - Rails 用另一列覆盖 updated_at 以获得正确的 cache_key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com