I have a Product model. My app creates a fragment cache for mysite.com/products, which triggers the index action (my app is
RESTful). Only admins can edit products, therefore, when adding a new
product, the mysite.com/products should expire.
But I have a problem: my products administration controller is in
admin/products_controller.rb, and therefore stupid Rails expires
admin/products fragment which is not correct.
Here is part of my code:
In the view:
–
<%- cache(:controller => ‘products’, :action => ‘index’) do -%>
<%- for product in @products -%>
…
–
In the admin/products_controller.rb:
–
cache_sweeper :product_sweeper, :only => [:create, :update, :destroy]
–
And my sweeper:
–
class ProductSweeper < ActionController::Caching::Sweeper
observe Product
def after_save(product)
expire_cache(product)
end
def after_destroy(product)
expire_cache(product)
end
def expire_cache(product)
expire_fragment(:controller => ‘products’, :action => ‘index’)
end
end
How to tell Rails to not be clever, and simply force him to expire
products fragment instead of admin/products?
I have a Product model. My app creates a fragment cache for mysite.com/products, which triggers the index action (my app is
RESTful). Only admins can edit products, therefore, when adding a new
product, the mysite.com/products should expire.
But I have a problem: my products administration controller is in
admin/products_controller.rb, and therefore stupid Rails expires
admin/products fragment which is not correct.
Here is part of my code:
In the view:
–
<%- cache(:controller => ‘products’, :action => ‘index’) do -%>
<%- for product in @products -%>
…
–
In the admin/products_controller.rb:
–
cache_sweeper :product_sweeper, :only => [:create, :update, :destroy]
–
And my sweeper:
–
class ProductSweeper < ActionController::Caching::Sweeper
observe Product
def after_save(product)
expire_cache(product)
end
def after_destroy(product)
expire_cache(product)
end
def expire_cache(product)
expire_fragment(:controller => ‘products’, :action => ‘index’)
end
end
How to tell Rails to not be clever, and simply force him to expire
products fragment instead of admin/products?
Due to completely outdated information I have been reading on the
internet, one should replace:
:controller => ‘products’, :action => ‘index’
by
products_url
Now caching and expiring works correctly.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.