狂欢扩展:未初始化的常量

时间:2014-01-09 23:26:51

标签: ruby-on-rails ruby spree

尝试使用官方网站上的文档进行狂欢扩展(运费计算器)。

狂欢扩展my_calc,然后添加到我的应用Gemfile:gem 'my_calc', :path => '../my_calc',然后bundle install

my_calc目录中,我创建了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

但是当我尝试启动rails服务器时,我收到了一个错误:

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

请帮忙。

2 个答案:

答案 0 :(得分:0)

config/initializers/spree.rb中的第23行上方添加以下内容:

module Spree
  class MyCalc < Spree::ShippingCalculator
  end
end

然后重新启动服务器以使更改生效。

答案 1 :(得分:0)

@Agis提供的方法可能会有效,但imho有一个更好的解决方案,只需等到所有内容都被初始化:

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
  (...)

现在一切都应该得到很好的加载,作为奖励,您将在管理页面中看到您的计算而不再添加任何内容。