4

以下是我的观点:

学生/show.json.rabl

object @student
cache @student
attribute :name, :gender, :age

node :school do |student|
  partial("shared/school", :object => student.school)
end

共享/_school.json.rabl

object @school
cache @school

attributes :id, :name

学生.rb:

class Student < ActiveRecord::Base

  belongs_to :school, :touch => true

end

学校.rb

class School < ActiveRecord::Base

  has_many :students

end

因此,当我更新学生时,缓存会按预期失效。问题是当我更新学校时,学生没有得到更新的学校属性。当我更新学校模型时,我原以为部分中的缓存@school 会失效,但似乎并非如此。

编辑:增加了对学生的触摸以在更新时使学校无效。

4

3 回答 3

1

为了帮助别人,这就是我现在正在做的事情:

我将学生展示视图拆分为:

学生/show.json.rabl:

extends "students/min_show"

node :school do |student|
  partial("shared/school", :object => student.school)
end

和学生/min_show.json

object @student
cache @student
attribute :name, :gender, :age

这样我仍然会为学生读取缓存,但学校总是从模板中呈现并单独缓存。

于 2013-03-07T20:33:16.090 回答
1

您需要在更新School时自动使缓存过期Student

学生类 < ActiveRecord::Base

belongs_to :school, :touch => true

结尾

于 2013-03-11T11:44:26.517 回答
0

我对你的问题发表了评论,我建议在学校下筑巢学生。一个适合您的简单解决方法是:

cache [@student, @student.school]

这样,它会检查两个对象上的 cache_key。

于 2013-04-09T19:59:09.220 回答