別のコントローラーからのファイル拡張子 (.json) を持つキャッシュ内のフラグメントを期限切れにするにはどうすればよいですか?
Rails 3.2.8 を使用しています。
/admin/books_controller と /api/books_controller という同じモデル用の 2 つのコントローラーがあります。管理者コントローラーはブックの作成/更新/削除に使用され、昇格されたアクセスが必要です。api/books_controller は、ユーザーが書籍に関する詳細を検索/一覧表示するために使用されます。api/books_controller をキャッシュしようとしました
class Api::BooksController < ApiController
caches_action :show
def show
@book = Book.find(params[:id])
end
end
これはうまくいきます。最初のリクエストは遅く、2 番目のリクエストは速い
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)
ここで、Book が更新または破棄されたときにフラグメントを期限切れにする必要があります。私はこれを持っています:
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)
JSON リクエストを使用する API コントローラーは、次のフラグメントを読み書きします。
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 )