2012-07-15 79 views
0

我使用的片段緩存中運行的Ruby 1.8.7的Rails 3.2.6 cache_sweeper不工作的自定義路線

在我的控制器一個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頁面,沒有找到任何有用的東西,在其他區域發現了大量有用的東西,所以它不會浪費時間。

回答

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 

無需在產品來傳遞,因爲我沒有一個顯示頁面做。

這將是一個更復雜的頁面,我有一個顯示頁面!