2016-09-01 4 views
0

Я пытаюсь рассчитать, сколько будет стоить моя транзакция. И для проверки я запускаю Transaction.last.calculate_total_payment, он возвращает BigDecimal, который я хочу, но ни один из атрибутов не обновляется в экземпляре после. Что я делаю не так?рельсы назначают атрибуты экземпляру

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 

ответ

0

Вы никогда не называя save в методе calculate_total_payment. Вам нужно явно сохранить объект, чтобы он сохранялся в БД.

0

В конце вы должны позвонить save!, если хотите внести изменения в базу данных. Без этого он изменит объект на месте (так что изменения исчезнут после перезагрузки выборки объекта снова).

Смежные вопросы