如何從另一個控制器過期緩存中帶有文件擴展名(.json)的片段?rails3緩存:過期片段與擴展名
我正在使用Rails 3.2.8。
我有兩個控制器爲相同的模型:/管理/ books_controller和/ api/books_controller。管理員控制器用於創建/更新/刪除書籍,並要求提升訪問權限。 api/books_controller用於搜索/列出用戶關於書籍的詳細信息。我試圖緩存api/books_controller
class Api::BooksController < ApiController
caches_action :show
def show
@book = Book.find(params[:id])
end
end
這很好。第一個請求很慢,第二個請求很快
Rendered api/books/show.json.rabl (119.7ms)
Write fragment views/localhost:3000/api/books/4.json (1.7ms)
Completed 200 OK in 568ms (Views: 124.2ms | ActiveRecord: 9.5ms)
Read fragment views/localhost:3000/api/books/4.json (0.2ms)
Completed 200 OK in 16ms (ActiveRecord: 2.6ms)
現在,我需要在本書更新或銷燬時終止片段。我有這樣的:
class Admin::BooksController < AdminController
def update
@book.attributes = params[:book]
if (@book.save)
expire_action(:controller => 'api/books', :action => 'show', :id => @book.id, :format => 'json')
end
end
end
然而,這不能解決相同的片段(請求是一個HTML請求現在,到不同的控制器):
Started PUT "/admin/books/4" for 127.0.0.1 at 2012-11-08 12:27:11 -0600
Processing by Admin::BooksController#update as HTML
...
Expire fragment views/localhost:3000/api/books/4 (0.1ms)
我與API控制器JSON請求讀取和寫入這個片段:
views/localhost:3000/api/books/4.json
我的管理控制器嘗試到期的部分:
views/localhost:3000/api/books/4
如何從另一個控制器以不同的請求格式過期views/localhost:3000/api/books/4.json?
這個問題:rails 3 caching: expire action for named route表示我可以使用正則表達式到期多個片段,但是這需要在緩存中的鍵是枚舉(http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html#method-i-expire_fragment)
用':format =>'json''執行'expire_action'會產生'Expire fragment views/localhost:3000/api/books/4'?這是問題嗎?我很難清楚地瞭解問題所在。 –
是的,我期望它產生views/localhost:3000/api/books/4.json –
我在我的應用程序中嘗試過...並且它按照預期的那樣工作:Expire fragment views/www.example.com/api/books/show/1.json ... ...你可以嘗試在一些非常基本的動作上用'format'參數做一個'expire_action',像你的主頁? –