8

按照此页面上的文档... 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

在 initializers/spree.rb 我添加了:

config = Rails.application.config
config.spree.calculators.tax_rates << Spree::Calculator::ZipTax

但我无法让 Rails 启动。我在初始化程序/spree.rb 文件上得到了 nil:NilClass (NoMethodError) 的未定义方法 `<<'。

如何注册自定义计算器?使用狂欢 1.3.2。

4

1 回答 1

11

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

在 config/application.rb

config.after_initialize do
  config.spree.calculators.tax_rates << Spree::Calculator::ZipTax
end

您遇到了一个错误,因为在您的应用程序启动过程中当时尚未初始化 spree 计算器,因此您试图将计算器附加到 nil 的东西上。

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

initializer 'spree.register.calculators' do |app|
  app.config.spree.calculators.shipping_methods << Spree::Calculator::ZipTax
end
于 2013-05-26T15:07:47.987 回答