2013-05-24 8 views
6

Seguendo la documentazione in questa pagina ... http://guides.spreecommerce.com/developer/calculators.htmlRegistrazione di un calcolatore di Spree personalizzato non funziona

Ho creato una classe in modelli/Spree/Calcolatrici/

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 

E in inizializzatori/Spree .rb Ho aggiunto:

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

Ma non riesco ad avviare Rails. Metodo non definito `< < 'per nil: NilClass (NoMethodError) nel file initializer/spree.rb.

Come si registra una calcolatrice personalizzata? Utilizzo di Spree 1.3.2.

risposta

9

Avrai bisogno di avvolgere la configurazione in un after_initialize:

in config/application.rb

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

Stai incontrare un errore perché i calcolatori baldoria non sono stati inizializzati in quel punta nel processo di avvio dell'applicazione, quindi stai tentando di aggiungere la calcolatrice a qualcosa che è zero.

altro metodo, comunemente utilizzato nelle estensioni Spree è quello di effettuare le seguenti operazioni:

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

Grazie tanto. La prossima volta saprò meglio che seguire i documenti di Spree da vicino;) –

+2

Su una nota a parte per i calcolatori di spedizione, assicurati che il nome della classe sia 'Spree :: Shipping :: ' affinché la tua calcolatrice appaia nel pannello di amministrazione https://github.com/spree/spree/blob/2a3f91229f65e1c0c7e16eb47da455d3488195bc/core/app/models/spree/shipping_method.rb#L50. Presto per rilasciare le versioni di Spree basta richiedere che i calcolatori di spedizione ereditino da 'Spree :: ShippingCalculator' https://github.com/spree/spree/blob/82fd0e0f762f17493c1609a998192272dab83e07/core/app/models/spree/shipping_method.rb#L50 – davidtingsu

+2

I pensi che questo dovrebbe essere effettivamente un nome di classe di Spree :: Calculator :: Shipping :: per farlo apparire nel Pannello di amministrazione. – lightcap