我在运行Ruby 1.8.7的Rails 3.2.6应用程序中使用片段缓存
在我的控制器中我有:
class ProductsController < ApplicationController
cache_sweeper :product_sweeper
清扫工具适用于C-UD操作,但不适用于我的POST方法“changeorder”。
我试过了:
cache_sweeper :product_sweeper, :only =>
并添加了所有C-UD以及:changeorder但是没有用。
我把这个添加到我的清扫工:
def after_product_changeorder(product)
expire_cache(product)
end
并且它没有错误但它也不起作用。我删除了product_并且没有出错,但是没有用。
我确实将其更改为_product * s *并且确实出错了。
我可以使片段过期的唯一方法是:
expire_fragment('page_home')
这里的记录是我的清扫工:
class ProductSweeper < ActionController::Caching::Sweeper
observe Product
def after_save(product)
expire_cache(product)
end
def after_destroy(product)
expire_cache(product)
end
private
def expire_cache(product)
# expire_page products_path
# expire_page product_path(product)
expire_fragment('page_home')
end
end
和我的控制器方法:
def changeorder
params[:product].each_with_index do |id, index|
Product.update_all(['displayorder=?', index+1], ['id=?', id])
end
render :nothing => true
end
和我的路线文件 - 它可能会有所帮助:
resources :products do
collection do
post 'changeorder'
end
end
我确实将'changeorder'更改为PUT,但这也没有任何区别。
这里有什么想法吗?我经历过堆叠的SO页面,没有发现任何有效的东西,在其他区域发现了许多有用的东西,所以这不是我浪费的时间。
答案 0 :(得分:0)
线索来自我得到的错误以及我将只使用片段缓存的事实。
我的清扫车现在看起来像这样:
class ProductSweeper < ActionController::Caching::Sweeper
observe Product
def after_save
expire_cache
end
def after_destroy
expire_cache
end
def after_products_changeorder
expire_cache
end
private
def expire_cache
expire_fragment('page_home')
end
end
无需传递产品,因为我没有显示页面。
对于我有显示页面的页面来说会更复杂一点!!