2014-01-09 157 views
1

試圖使用官方網站上的文檔製作狂熱擴展(運輸計算器)。Spree擴展:未初始化的常量

spree擴展名my_calc,然後添加到我的應用程序Gemfile:gem 'my_calc', :path => '../my_calc',然後bundle install

my_calc DIR我創建app/models/spree/calculator/shipping/my_calc.rb

module Spree 
    class MyCalc < Spree::ShippingCalculator 
     preference ... 

     def self.description 
      ... 
     end 

     def compute_package(package) 
      ...   
     end 

     def available?(package) 
      ... 
     end 
    end 
end 

然後添加以下到config/initializers/spree.rb

config = Rails.application.config 
config.spree.calculators.shipping_methods << Spree::MyCalc 

但是,當我嘗試啓動軌服務器,我得到了一個錯誤:

.../config/initializers/spree.rb:23:in `<top (required)>': uninitialized constant Spree::MyCalc (NameError) 

請幫忙。

+0

差點忘了。 Spree版本2-1穩定。 – ChipJuggler

回答

0

方法可能會工作,但恕我直言有一個更好的解決方案,只是等待,直到一切都被初始化:

config = Rails.application.config 
config.after_initialize do 
    config.spree.calculators.shipping_methods << Spree::MyCalc 
end 

根據你計算的路徑,你可能會得到Unable to autoload constant Spree::Calculator::Shipping::MyCalc錯誤,因爲Rails會嘗試由於文件路徑自動加載這樣的類。要解決它改變你的類一點:

module Spree 
    class Calculator::Shipping::MyCalc < ShippingCalculator 
    (...) 

現在一切都應該得到加載罰款,並作爲獎勵,你會看到在管理頁面的鈣,無所添加。

+0

同樣的錯誤:未初始化的常量Spree :: MyCalc(NameError) – ChipJuggler

+1

錯誤消失後,我改變了config.spree.calculators.shipping_methods << Spree :: MyCalc到config.spree.calculators.shipping_methods << Spree :: Calculator :: Shipping: :MyCalc – ChipJuggler

+0

如果有人發現它:最好不要觸摸app中的spree.rb,但添加'initializer'spree.register.calculators'do | app | app.config.spree.calculators.shipping_methods << Spree :: Calculator :: Shipping :: MyCalc end'擴展名爲lib/my_calc/engine.rb – ChipJuggler

0

添加以下某處上面一行23 config/initializers/spree.rb

module Spree 
    class MyCalc < Spree::ShippingCalculator 
    end 
end 

然後重新啓動服務器,以使更改生效。通過@Agis提供

+0

但是,這種方式我只是定義一個空的類MyCalc。它不會添加我的擴展的內容。 – ChipJuggler

+0

@ChipJuggler是的,你定義了一個空的類,但是當你加載其他代碼('models /'等)時,它將被重新打開並且方法將被添加。 – Agis

+0

我試過了,但是當我運行rails c,然後mycalc = Spree :: MyCalc.new,mycalc不包含擴展中定義的方法(compute_package,available ..) – ChipJuggler

相關問題