2013-10-10 24 views
3

我有一個狂歡商務2.1.1應用程序(Rails 4.0.0),我想顯示一些'相關產品'在產品詳細信息頁面上。相關產品只是隨機選擇的品牌和性別相同的產品。它正在工作......我製作了products_controller_decorator.rb,擴展了熱潮products_controller.rb導航過濾器掛鉤控制器操作已經運行後,但在視圖呈現之前

狂歡的products_controller.rb具有內置@product一個的before_filter:

before_filter :load_product, :only => :show 

和我自己的裝飾有設置@related_products

before_filter :get_related_products, :only => :show 

一個方法的問題是:

一)因爲它發生,過濾器之前的load_product在過濾器之前在我的get_related_products之前被調用,因此co-incidenta lly,我有權訪問它設置的@product變量。但據我所見,這並不能保證。我想確保我的濾波器,後來被稱爲...

B)施普雷的show方法還設置@taxon,我真的很希望能夠在自己的get_related_products方法使用。

所以,我想要的是像CakePHP的before_render這樣的鉤子,它在控制器方法運行之後被調用,但是在呈現視圖之前。我似乎無法找到相當於鐵軌的鐵軌。有這樣的事嗎? after_filter不會爲我做,因爲這是在視圖呈現後調用的。

如果不是,在Spree的產品控制器的show方法運行後,我可以通過一種方式獲得它的實例變量,然後調用get_related_products的最佳方式是什麼?

回答

5

一)施普雷的load_product將永遠是你的get_related_products,因爲它是之前登記之前調用。

二)有沒有before_render之間沒有過濾器的before_filterafter_filter

您可以通過覆蓋實現這一目標:使

class Spree::ProductsController.class_eval do 
    def render(options = nil, extra_options = {}, &block) 
     # here you define related products 
     @related_products = search_related_products(@product) 

     # don't forget to call super 
     super(options, extra_options, &block) 
    end 
end 
+0

這個答案可能是清潔劑:高清渲染(*參數)run_before_render和超級結束 – alexandrecosta

相關問題