обратные вызовы рельсов не выполняются
Я пытаюсь выяснить, почему мои обратные вызовы не выполняются.sometimes
(вы слышали это правильноиногда так как большую часть времени работает из коробки)
Все, что у меня есть, это отношения родитель / ребенок между двумя моделями
при создании детской записи все, что яя делаю вafter_create
обратный вызов - это обновление (накапливать всю дочернюю сумму в родительском поле, чтобы избежать тяжелых запросов во время выполнения) поле суммы в родительской таблице / записи модели
Родительская модель ()Payout
Дочерняя модель есть ()Sales Transaction
Payout
имеет много SalesTransactions
как сказано выше при создании сделки купли-продажи I 'm обновляет (увеличивая, чтобы быть точным)amount
поле родительской записи (запись о выплате), чтобы избежать тяжелого запроса во время выполнения.
так выплатаamount field
не что иное, как суммирование всей суммыsales_transactions
из этих выплат
это так же хорошо, как сказать, как будет payout.amount (после выполнения обратного вызова)
payout.amount == payout.sales_transactions.pluck('amount').sum
и это то, что я пытаюсь достичь с помощью обратных вызовов
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
Интересная часть здесь заключается в том, чтоsometime
когда SalesTransactioncreated
обратный вызов просто не вызывается, так как я не вижу значения обновления записи выплат
Я пытаюсь избежать обратного вызова на данный момент, но зная, радиwhy
обратный вызов не выполняетсяled me
задать этот вопрос
Нет проверки ни в SalesTransaction, ни в таблице выплат (я проверял это 1000 раз) =>Payout.validators
[] =>
SalesTransaction.validators
[]
Там нет проблемы массового назначения, как я не могу определитьattr_accessible
или жеattr_protected
(Я проверяю это, а также, как сказал, это работает большую часть времени, которое неt было в случае с предупреждением о массовом назначении)
Запись SalesTransaction создается все время, только запись выплат не обновляется ()sometime
Я удалил большинство нежелательных (здесь) ассоциаций изsales_transactions
а такжеpayouts
для краткости кода
Нет, нет ничего подобногоaccepts_nested_attributes_for
на любой из моделей
Динамические проверки не прилагаются, дополнительные, дополнительные
Наконец, вот как яя пытаюсь создать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)