我在Rails 4.2.6下的haml中有以下片段,在那里我渲染了一整天的记录,然后移动到第二天。我想使用俄罗斯玩偶缓存来加速页面加载,最多可以渲染300张票,但我不确定如何为集合创建缓存键 -
@tickets.where(calendar_date: day).order(:calendar_order)
的缓存键?
然后我需要缓存单个票证。请考虑一下,当我在这里寻求帮助时,我有点困惑。因此,如果我的问题似乎不清楚,请让我澄清是否需要。
请注意,day
变量在代码中提前递增。
.row(data-row-date="#{ day }")
- @tickets.where(calendar_date: day).order(:calendar_order).each do |t|
- cache(t) do
# code for each job ticket
更新
以下代码比我之前的尝试效果更好,但我不确定它是否准确,密钥是否会正确到期。
.row(data-row-date="#{ day }")
- tickets = @tickets.where(calendar_date: day).order(:calendar_order)
- cache(["day-#{day}", tickets.map(&:id), tickets.maximum(:updated_at)]) do
- tickets.each do |t|
- cache(t) do
你能告诉我,我是否走在正确的轨道上?谢谢你。
答案 0 :(得分:1)
"俄罗斯娃娃缓存"通常意味着当过时的嵌套资源自动缓存其父资源的缓存时的一种缓存(例如,更新故障单信息时,user
摘要与ticket
摘要一起过时。
我不确定你以后是否会添加一定程度的嵌套(为模型关系设置touch: true
需要更多的努力),但现在似乎对我很好:
t
制作md5); 我能想象的几个问题包括:
calendar_date
实际上是Date
,则全球不同地区的用户可能希望根据实际日期获得结果,而不是基于服务器的结果; update_all
时,ActiveRecord不会更新时间戳字段(updated_at / updated_on)。请注意执行Ticket.update_all(params)
之类的操作,因为它无法使您的缓存摘要无效。