wywołania zwrotne szyny nie są wykonywane

W moim życiu próbuję dowiedzieć się, dlaczego moje wywołania zwrotne nie są wykonywanesometimes(słyszałeś to dobrzeczasami jak większość czasu działa po wyjęciu z pudełka)

Mam tylko relacje rodzic / dziecko między 2 modelami

po utworzeniu rekordu dziecka wszystko, co robięafter_create callback to aktualizacja (gromadzenie wszystkich kwot podrzędnych w polu nadrzędnym, aby uniknąć ciężkich zapytań w czasie wykonywania) pole kwoty w rekordzie tabeli nadrzędnej / rekordu modelu

Model macierzysty (Payout)

Model dziecka to (Sales Transaction)

Payout ma wiele SalesTransactions jak wspomniano powyżej przy tworzeniu transakcji sprzedaży, którą aktualizuję (zwiększając dokładność)amount pole rekordu nadrzędnego (rekord wypłaty), aby uniknąć ciężkich zapytań w czasie wykonywania.

więc Wypłataamount field to nic innego jak sumowanie wszystkich ilościsales_transactions z tych wypłat

tak dobrze, jak powiedzieć, że payout.amount będzie (po wykonaniu wywołania zwrotnego)

payout.amount == payout.sales_transactions.pluck('amount').sum

i to, co próbuję osiągnąć za pomocą wywołań zwrotnych

class SalesTransaction < ActiveRecord::Base
   belongs_to :payout
   after_create :update_payout_for_sale

   def update_payout_for_sale
    sales_amount = payout.amount || 0
    sales_amount =  sales_amount + amount.to_f
    ## Also make note of the minus from original amount i.e refund and custom_deduction_amount
    payout.update_attributes(:amount => sales_amount)
  end  

end

class Payout < ActiveRecord::Base
  has_many :sales_transactions
  has_one :referrer
  after_save :update_referrer_earning

  def update_referrer_earning
    referrer.update_attributes(:amount  => (amount*10)/100.to_d)) rescue nil
  end
end

Interesująca jest tutaj ta częśćsometime kiedy jest SalesTransactioncreated wywołanie zwrotne nie jest wywoływane, ponieważ nie widzę wartości aktualizacji rekordu wypłat

Próbuję teraz uniknąć wywołania zwrotnego, ale dla wiedzywhy wywołanie zwrotne nie zostało wykonaneled me zadać to pytanie

UWAGA

Nie ma walidacji ani w tabeli SalesTransaction i Payout (sprawdzam to 1000 razy)Payout.validators => []

SalesTransaction.validators => []

Nie zdefiniowałem żadnego problemu z masowym przypisywaniemattr_accessible lubattr_protected (Sprawdzam to również i, jak powiedziałem, działa najczęściej, co nie byłoby w przypadku ostrzeżenia o przypisaniu masy)

Rekord SalesTransaction jest tworzony przez cały czas, tylko rekord wypłat nie jest aktualizowany (sometime)

Usunąłem większość niechcianych (tutaj) skojarzeń zsales_transactions ipayouts dla zwięzłości kodu

Nie ma czegoś takiegoaccepts_nested_attributes_for na jednym z modeli

Nie dołączono dynamicznych walidacji, dodatkowe, dodatkowe

Wreszcie, w jaki sposób próbuję stworzyćSalesTransaction

  options =  {"performer_id"=>177, "customer_id"=>35526, "sale_type"=>"sale", "show_id"=>502, "performer_percentage"=>BigDecimal.new("40.0"), "show_duration"=>4104, "gross_credits"=>3754, "gross_sales"=>BigDecimal.new("375.4"), "amount"=>BigDecimal.new("150.16"), "affiliate_id"=>nil, "affiliate_earning"=>BigDecimal.new("0.0"), "total_profit"=>BigDecimal.new("225.24"), "payout_period_id"=>89,"payout_id"=>4156, "stream_connection_id"=>540572, "history_id"=>44575, "credits"=>{:when_show_started=>350, :purchased_during_show=>{:free=>[], :paid=>[]}, :total_consumed=>{:free=>350, :paid=>3754}}, "sliding_scale_recalculations_done"=>false, "paid_minutes"=>62.57}

SalesTransaction.create(options)

questionAnswers(2)

yourAnswerToTheQuestion