2013-05-24 4 views
6

Nach der Dokumentation auf dieser Seite ... http://guides.spreecommerce.com/developer/calculators.htmleine benutzerdefinierte Spree Rechner Registrierung nicht

Ich habe eine Klasse in Modellen/Spree/Rechner erstellt/

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 

Und in initializers/spree Arbeits .rb ich habe hinzugefügt:

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

Aber ich kann nicht bekommen Rails zu starten. Ich bekomme undefinierte Methode `< < 'für nil: NilClass (NoMethodError) auf der Initialisierer/spree.rb-Datei.

Wie registriere ich einen benutzerdefinierten Rechner? Verwenden von Spree 1.3.2.

Antwort

9

Sie benötigen Ihre Konfiguration in einer after_initialize wickeln:

in config/application.rb

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

Sie haben einen Fehler sind zu begegnen, weil die Spree Rechner haben dabei nicht initialisiert Zeigen Sie in Ihrem Anwendungsstartprozess, so dass Sie versuchen, den Rechner an etwas anzufügen, das null ist.

Ein weiteres Verfahren ist allgemein in Spree-Erweiterungen verwendet, den folgenden zu tun:

initializer 'spree.register.calculators' do |app| 
    app.config.spree.calculators.shipping_methods << Spree::Calculator::ZipTax 
end 
+0

Vielen Dank. Beim nächsten Mal werde ich besser wissen, als Spree's Dokumente so genau zu folgen;) –

+2

Bei einer Seitennotiz für Versandtaschenrechner vergewissern Sie sich, dass der Klassenname 'Spree :: Shipping :: ' lautet, damit Ihr Rechner in der Admin-Bereich https://github.com/spree/spree/blob/2a3f91229f65e1c0c7e16eb47da455d3488195bc/core/app/models/spree/shipping_method.rb#L50. Bald zu Versionen von Spree freizugeben nur erfordern, dass Versandrechner erben von 'Spree :: ShippingCalculator' https://github.com/spree/spree/blob/82fd0e0f762f17493c1609a998192272dab83e07/core/app/models/spree/shipping_method.rb#L50 – davidtingsu

+2

I denke, das sollte eigentlich ein Klassenname von Spree :: Calculator :: Shipping :: sein, damit es im Admin Panel angezeigt wird. – lightcap