我在运行 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')
在 changeorder 控制器方法中。
为了记录,这里是我的扫地机:
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 页面,但没有找到任何有用的东西,在其他领域发现了大量有用的东西,所以我没有浪费时间。