在 Spree Commerce 上创建新计算器时出错 gem

Error when create a new Calculator on Spree Commerce gem

我正在学习 rails 并且我喜欢通过尝试创造真实的东西来学习。

我在尝试创建一个新的计算器以用于 spree commerce 的运输区域时遇到了一些问题。

遵循此文档教程。

http://guides.spreecommerce.org/developer/calculators.html#creating-a-new-calculator

按照教程,我在这个目录中创建了这个 class。

app/models/spree/calculator/shipping/my_own_calculator.rb

我的class是这样的

class MyOwnCalculator < Spree::ShippingCalculator
  def self.description
    Spree.t(:shipping_flat_rate_per_order)
  end

  def compute_package(package)
    self.preferred_amount
  end

  def available?(object)
    object.currency == "USD"
  end
end

和我的文件 config/initializers/spree.rb

# Configure Spree Preferences
#
# Note: Initializing preferences available within the Admin will overwrite any changes that were made through the user interface when you restart.
#       If you would like users to be able to update a setting with the Admin it should NOT be set here.
#
# Note: If a preference is set here it will be stored within the cache & database upon initialization.
#       Just removing an entry from this initializer will not make the preference value go away.
#       Instead you must either set a new value or remove entry, clear cache, and remove database entry.
#
# In order to initialize a setting do:
# config.setting_name = 'new value'
Spree.config do |config|
  # Example:
  # Uncomment to stop tracking inventory levels in the application
  # config.track_inventory_levels = false
end

Spree.user_class = "Spree::User"

config = Rails.application.config
config.spree.calculators.shipping_methods << Spree::Calculator::Shipping::MyOwnCalculator

错误是这样的:

Unable to autoload constant Spree::Calculator::Shipping::MyOwnCalculator, expected /home/davi/dev/attsalaoruby/app/models/spree/calculator/shipping/my_own_calculator.rb to define it (LoadError)

我的堆栈跟踪是这样的

/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:512:in `load_missing_constant': Unable to autoload constant Spree::Calculator::Shipping::MyOwnCalculator, expected /home/davi/dev/attsalaoruby/app/models/spree/calculator/shipping/my_own_calculator.rb to define it (LoadError)
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:203:in `const_missing'
    from /home/davi/dev/attsalaoruby/config/initializers/spree.rb:21:in `<top (required)>'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/engine.rb:648:in `block in load_config_initializer'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/activesupport-5.0.1/lib/active_support/notifications.rb:166:in `instrument'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/engine.rb:647:in `load_config_initializer'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/engine.rb:612:in `block (2 levels) in <class:Engine>'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/engine.rb:611:in `each'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/engine.rb:611:in `block in <class:Engine>'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `run'
    from /home/davi/.rvm/gems/ruby-2.3.0@5.0.0.1/gems/railties-5.0.1/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /home/davi/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:228:in `block in tsort_each'
    from /home/davi/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
....

您是否像这样定义了 class 内部模块: module Spree module Calculator::Shipping class MyOwnCalculator < Spree::ShippingCalculator ... end end end