Rails 3.2.6 cache_sweeper不适用于自定义路由

时间:2012-07-15 20:16:07

标签: ruby-on-rails

我在运行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页面,没有发现任何有效的东西,在其他区域发现了许多有用的东西,所以这不是我浪费的时间。

1 个答案:

答案 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

无需传递产品,因为我没有显示页面。

对于我有显示页面的页面来说会更复杂一点!!