2016-09-01 6 views
0

Ich versuche zu berechnen, wie viel die Gesamtkosten meiner Transaktion sein werden. Und um zu testen, ich bin Transaction.last.calculate_total_payment läuft, gibt es eine BigDecimal, was ich will, aber keines der Attribute werden auf der Instanz nach aktualisiert. Was mache ich falsch?Schienen zuweisen Attribute zu Instanz

class Transaction < ActiveRecord::Base 
    has_one :auction 
    has_one :bid 
    belongs_to :inventory_part  
    TIER0 = 0 
    TIER1 = 5_000 
    TIER2 = 50_000 
    TIER3 = 500_000 
    TIER4 = 1_000_000 
. 
. 
. 
. 

    def calculate_total_payment 
    part = self.bid.part_price 

    self.tax = part * self.tax_rate 

    if self.bid.tx.shipping_account 
     self.final_shipping_cost = 0 
    else # testing purposes 
     self.final_shipping_cost = self.bid.est_shipping_cost 
    end 
    price_before_fees = part + self.tax + self.final_shipping_cost 

    if price_before_fees < TIER1 #5,000 
     self.bid_aero_fee = price_before_fees * 0.025 
     self.armor_fee = price_before_fees * 0.015 
    elsif price_before_fees < TIER2 #50,000 
     self.bid_aero_fee = (price_before_fees - TIER1) * 0.015 + 125 
     self.armor_fee = (price_before_fees - TIER1) * 0.01 + 75 
    elsif price_before_fees < TIER3 #500,000 
     self.bid_aero_fee = (price_before_fees - TIER2) * 0.0125 + 800 
     self.armor_fee = (price_before_fees - TIER2) * 0.0075 + 525 
    elsif price_before_fees < TIER4 #1,000,000 
     self.bid_aero_fee = (price_before_fees - TIER3) * 0.0075 + 6425 
     self.armor_fee = (price_before_fees - TIER3) * 0.005 + 3900 
    else # anything over a million 
     self.bid_aero_fee = (price_before_fees - TIER4) * 0.0075 + 10175 
     self.armor_fee = (price_before_fees - TIER4) * 0.0035 + 6400 
    end 

    self.total_fee = self.armor_fee + self.bid_aero_fee 
    self.total_amount = price_before_fees + self.total_fee 
    end 
end 

Antwort

0

Sie rufen nie save im calculate_total_payment Methode. Sie müssen das Objekt explizit speichern, damit es in der Datenbank beibehalten wird.

0

Sie sollten am Ende save! aufrufen, wenn Sie Ihre Änderungen dauerhaft in der Datenbank vornehmen möchten. Ohne dies wird das Objekt an Ort und Stelle geändert (so verschwinden die Änderungen nach dem erneuten Laden des Objekts erneut).

Verwandte Themen