2012-08-16 29 views
15

我試圖重寫base_helper.rb的helper方法:施普雷使用此重載helper方法

module Spree 
    module BaseHelper.class_eval do 

    def taxons_tree(root_taxon, current_taxon, max_level = 1) 
     ..... 
    end 

    end 
end 

它不是爲我工作。任何人都知道我在這裏錯過了什麼?

謝謝!

修正:

我應該使用:

Spree::BaseHelper.module_eval do 

    def taxons_tree(root_taxon, current_taxon, max_level = 1) 
     ... 
    end 

end 

代替。

+0

對我來說,只有當使用'Spree :: BaseHelper.class_eval' – 2014-10-31 11:36:14

回答

20

重新打開該模塊將工作一樣好:

module Spree 
    module BaseHelper 
    def taxons_tree(root_taxon, current_taxon, max_level = 1) 
     ... 
    end 
    end 
end 

有沒有特別的理由使用class_evalmodule_eval,一直只是在很長一段時間的施普雷項目的習慣。

+2

Ryan,我們在哪裏放這段代碼。我需要重寫'link_to_cart'方法來製作一個定製的購物車細分市場。我來自PHP,如果這是一個Rails的問題,我很抱歉,但高度讚賞評論。 – 2013-05-09 17:31:26

+3

在app/helpers下創建一個名爲spree的文件夾,並將Ryan Bigg的代碼放入一個名爲base_helper.rb的文件base_helper.rb – 2013-10-05 16:49:30

+12

@JoaoPereira如果您調用base_helper.rb,spree將不會加載原始的base_helper.rb。您必須複製/粘貼每個功能,才能正常運行。但是,如果你調用base_helper_decorator.rb,它會起作用。 – alexandrecosta 2014-06-04 15:00:26