我正在尝试生成一个片段缓存(使用Dalli/Memcached存储),但是键被生成为包含“#”的一部分,因此Rails似乎无法识别缓存值并且正在访问数据库。
我的视图中缓存键看起来像这样:
我的视图中缓存键看起来像这样:
cache([@jobs, "index"]) do
控制器拥有:
@jobs = @current_tenant.active_jobs
使用下面这个实际的Active Record查询:
def active_jobs
self.jobs.where("published = ? and expiration_date >= ?", true, Date.today).order("(featured and created_at > now() - interval '" + self.pinned_time_limit.to_s + " days') desc nulls last, created_at desc")
end
查看Rails服务器,我发现缓存已经被读取,但是SQL查询仍在运行:
Cache read: views/#<ActiveRecord::Relation:0x007fbabef9cd58>/1-index
Read fragment views/#<ActiveRecord::Relation:0x007fbabef9cd58>/1-index (1.0ms)
(0.6ms) SELECT COUNT(*) FROM "jobs" WHERE "jobs"."tenant_id" = 1 AND (published = 't' and expiration_date >= '2013-03-03')
Job Load (1.2ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."tenant_id" = 1 AND (published = 't' and expiration_date >= '2013-03-03') ORDER BY (featured and created_at > now() - interval '7 days') desc nulls last, created_at desc
有什么想法是我可能做错了吗?我确定这与密钥生成和ActiveRecord::Relation有关,但我不确定如何解决。