2013-03-07 98 views
4

這裏是我的Rabl的觀點:Rabl的緩存與嵌套對象

學生/ 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 

student.rb:

class Student < ActiveRecord::Base 

    belongs_to :school, :touch => true 

end 

school.rb

class School < ActiveRecord::Base 

    has_many :students 

end 

所以,當我更新的學生,如預期高速緩存被無效。問題是,當我更新一所學校時,學生們沒有得到更新的學校屬性。當我更新學校模型時,我會認爲部分中的cache @school會失效,但似乎並非如此。

編輯:添加觸摸到學生使更新失效學校。

回答

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 

這樣我仍然讀取學生的緩存,但學校總是從模板渲染並分開緩存。

1

你需要自動過期School緩存時Student更新:

類學生<的ActiveRecord :: Base的

belongs_to :school, :touch => true 

+0

如果學生更新,那肯定有效。但是當學校更新時,它反而無用。基本上,我正在尋找一種方法來做2個緩存讀取,一個是針對學生的,另一個針對每個學校。 – ankimal 2013-03-11 14:26:06

0

我留下了評論你的問題,我建議將學生嵌入學校。一個簡單的解決方法,應該爲你工作是:

cache [@student, @student.school] 

這樣它檢查兩個對象上的cache_key。

+0

僅供參考,此問題:https://github.com/nesquena/rabl/issues/418 – madh 2013-11-06 19:29:20