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
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)