我在运行Ruby1.8.7的Rails 3.2.6应用程序中使用片段缓存
在我的控制器里我有:
class ProductsController < ApplicationController
cache_sweeper :product_sweeper扫描程序适用于C操作,但不适用于我的POST方法"changeorder“。
我试过:
cache_sweeper :product_sweeper, :only => 并添加了所有的C-UD和也:转换顺序,但这是无效的。
我把这个加到我的清扫车里:
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 我确实改变了“转换顺序”来放置,但这也没有任何区别。
这里有什么想法吗?我经历了大量的SO页面,没有找到任何有用的东西,在其他领域找到了大量有用的东西,所以我没有浪费时间。
发布于 2012-07-16 08:25:10
线索来自于我得到的错误,以及我将只使用片段缓存的事实。
我的清洁工现在看起来是这样的:
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不需要传递一个产品,因为我没有展示页面。
这将是一个更复杂的网页,我有一个展示页面!
https://stackoverflow.com/questions/11495268
复制相似问题