2014-10-31 94 views

回答

0

此代碼已經過測試並正在運行。謝謝@aledustet幫助我找到解決方案:)

創建/app/helpers/spree/base_helper_decorator.rb並將下面的代碼放在那裏。不要使用/app/helpers/spree/base_helper.rb,因爲您必須複製/粘貼base_helper.rb中的每個方法才能正常運行。

module Spree 
    module BaseHelper 

    def meta_data 
     meta = ({ 
     keywords: "test keyword", 
     description: "test description", 
     }) 
    end 

    end 
end 

你也可以做

Spree::BaseHelper.module_eval do 
    .... 
end 

我讀,別人報這個第二個解決方案時,第一沒有工作,所以我兩個都貼出。兩者都適合我。

Per Ryan Bigg:沒有特別的理由使用class_eval和module_eval,這只是Spree項目很長一段時間的習慣。 https://stackoverflow.com/a/12075315/2229277

在這一點上,你已經掌握了你的元數據,但是如何在控制器的基礎上進行設置呢?你可以通過創建一個私有方法並在控制器上調用helper_method函數來實現。下面是的工作和測試一個完整的例子:

class BrandsController < Spree::StoreController 

    helper_method :my_meta_data 

    #controller actions here. 

    private 
    def my_meta_data 
    meta = ({ 
     keywords: "keywords here", 
     description: "description here", 
    }) 
    end 

end 

我的基本助手看起來是這樣的,這樣它可以在情況下,my_meta_data方法沒有定義一些默認的元數據。

module Spree 
    module BaseHelper 

    def meta_data 
     if (defined? my_meta_data) 
     meta = my_meta_data 
     else 
     meta = ({ 
      keywords: "default keywords here", 
      description: "default description here", 
     }) 
     end 
    end 

    end 
end 
2

你需要在你的第二個行使用:

module Spree 
    module BaseHelper.class_eval 
    ... 
    end 
end 

這應該工作。

相關問題