callbacks de trilhos não sendo executados
Para minha vida eu estou tentando descobrir porque meus callbacks não estão sendo executadossometimes
(você ouviu direitoas vezes como na maioria das vezes funciona fora da caixa)
Tudo o que tenho são relações pais / filhos entre dois modelos
após a criação de registro infantil tudo o que estou fazendo emafter_create
o retorno de chamada é atualizar (acumular todo o valor filho no campo pai para evitar consulta pesada em tempo de execução) o campo de valor no registro de tabela pai / modelo
Modelo pai (Payout
)
Modelo filho é (Sales Transaction
)
Payout
tem muitos SalesTransactions
como dito acima após a criação da transação de vendas estou atualizando (incremento para ser preciso) oamount
campo do registro pai (registro de pagamento) para evitar consultas pesadas no tempo de execução.
então Pagamentoamount field
não é nada, mas soma de todo o montante dosales_transactions
desses pagamentos
é tão bom quanto dizer como payout.amount seria (após o callback ser executado)
payout.amount == payout.sales_transactions.pluck('amount').sum
e isso que eu estou tentando alcançar usando callbacks
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
A parte interessante aqui é quesometime
quando SalesTransaction écreated
o retorno de chamada não é chamado, pois não vejo o valor de atualização do registro de pagamentos
Eu estou tentando evitar o retorno de chamada por enquanto, mas pelo bem saberwhy
o retorno de chamada não está sendo executado temled me
fazer esta pergunta
Não há validação nem na tabela SalesTransaction e Payout (verifiquei isso 1000 vezes)Payout.validators
=> []
SalesTransaction.validators
=> []
Não há problema de asssignação em massa, como eu não definiattr_accessible
ouattr_protected
(Eu também verifico isso e também como disse que funciona a maior parte do tempo que não teria sido o caso com aviso de atribuição em massa)
O registro SalesTransaction está sendo criado o tempo todo, somente o registro de pagamentos não está sendo atualizado (sometime
)
Eu removi a maioria das associações indesejadas (por aqui) desales_transactions
epayouts
para brevidade de código
Não, não há nada comoaccepts_nested_attributes_for
em qualquer um dos modelos
Nenhuma validação dinâmica anexada, extra, extra
Por último, aqui como eu estou tentando criar oSalesTransaction
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)