注册自定义大礼包计算器不起作用

Mik*_*ffe 8 spree ruby-on-rails-3

按照此页面上的文档... http://guides.spreecommerce.com/developer/calculators.html

我在模特/狂欢/计算器/中创建了一个类

module Spree 
class Calculator::ZipTax <  Calculator
  def self.description
  "Calculates Tax Rates From Zipcode in TaxRates Table"
   end
    def compute(computable)
  case computable
    when Spree::Order
      compute_order(computable)
    when Spree::LineItem
      compute_line_item(computable)
  end
end
    def compute_order(order)
    zipcode = order.bill_address.zipcode[0,5]
    zip = TaxTable.where(:zipcode => zipcode).first
    if(zip.present?)
      rate = zip.combined_rate
        order.line_items.sum(&:total) * rate
    else 
      0
    end

end
  end
end
Run Code Online (Sandbox Code Playgroud)

在initializers/spree.rb中我添加了:

config = Rails.application.config
config.spree.calculators.tax_rates << Spree::Calculator::ZipTax
Run Code Online (Sandbox Code Playgroud)

但我不能让Rails开始.我在initializer/spree.rb文件中得到nil:NilClass(NoMethodError)的未定义方法`<<'.

如何注册自定义计算器?使用Spree 1.3.2.

gma*_*all 11

您需要将配置包装在after_initialize中:

在config/application.rb中

config.after_initialize do
  config.spree.calculators.tax_rates << Spree::Calculator::ZipTax
end
Run Code Online (Sandbox Code Playgroud)

您遇到错误,因为在应用程序启动过程中,狂欢计算器尚未初始化,因此您尝试将计算器附加到零值.

Spree扩展中常用的另一种方法是执行以下操作:

initializer 'spree.register.calculators' do |app|
  app.config.spree.calculators.shipping_methods << Spree::Calculator::ZipTax
end
Run Code Online (Sandbox Code Playgroud)

  • 对于运费计算器,请确保类名为"Spree :: Shipping :: <YourCalculatorName>",以便计算器显示在管理面板中https://github.com/spree/spree/blob/2a3f91229f65e1c0c7e16eb47da455d3488195bc /core/app/models/spree/shipping_method.rb#L50.很快发布狂欢版本就要求运费计算器继承"Spree :: ShippingCalculator"https://github.com/spree/spree/blob/82fd0e0f762f17493c1609a998192272dab83e07/core/app/models/spree/shipping_method.rb#L50 (2认同)
  • 我认为这实际上应该是Spree :: Calculator :: Shipping :: <YourCalculatorName>的类名,以使其显示在管理面板中. (2认同)