0

我在运行 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 页面,但没有找到任何有用的东西,在其他领域发现了大量有用的东西,所以我没有浪费时间。

4

1 回答 1

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

由于我没有展示页面,因此无需传递产品。

对于我确实有显示页面的页面来说,它会稍微复杂一点!!

于 2012-07-16T08:25:10.543 回答