8

このページのドキュメントに従ってください... http://guides.spreecommerce.com/developer/calculators.html

models/spree/calculators/ にクラスを作成しました

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 を起動できません。initializer/spree.rb ファイルで nil:NilClass (NoMethodError) に対して未定義のメソッド `<<' を取得します。

カスタム電卓を登録するにはどうすればよいですか? Spree 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

アプリケーションの起動プロセスのその時点でスプリー電卓が初期化されていないため、エラーが発生しています。そのため、nil のものに電卓を追加しようとしています。

Spree 拡張機能で一般的に使用される別の方法は、次のことを行うことです。

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