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

更新School時にキャッシュを自動期限切れにする必要があります。Student

クラスStudent<ActiveRecord:: Base

belongs_to :school, :touch => true

終わり

于 2013-03-11T11:44:26.517 に答える
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 に答える
0

学生を学校の下にネストすることをお勧めするあなたの問題にコメントを残しました。うまくいくはずの簡単な回避策は次のとおりです。

cache [@student, @student.school]

このようにして、両方のオブジェクトの cache_key をチェックします。

于 2013-04-09T19:59:09.220 に答える