2013-03-07 6 views
4

Вот мои взгляды Рабля: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 

Так что, когда я обновляю студента, кэш будет аннулирована, как и ожидалось. Проблема в том, что когда я обновляю школу, ученики не получают обновленных атрибутов школы. Я бы подумал, что кеш @school в частичном случае станет недействительным, когда я обновляю школьную модель, но это, похоже, не так.

EDIT: Добавлен контакт ученика, чтобы аннулировать школу при обновлении.

ответ

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 обновляется:

класс Student < ActiveRecord :: Base

belongs_to :school, :touch => true 

конец

+0

Это определенно работает, если ученик обновлен. Но, когда школа обновляется, это не работает наоборот. В принципе, я ищу способ сделать 2 чтения кеша, один для учеников и один для каждой школы. – ankimal

0

Я оставил комментарий на ваш вопрос, где я рекомендую вложить учащихся в школу. Легкое обходное решение, которое должно сработать для вас:

cache [@student, @student.school] 

Таким образом, он проверяет cache_key на обоих объектах.

+0

FYI, эта проблема: https://github.com/nesquena/rabl/issues/418 – madh

Смежные вопросы