No se ejecutan devoluciones de llamada de carriles
En mi vida, estoy tratando de averiguar por qué mis devoluciones de llamada no se están ejecutando.sometimes
(lo escuchaste bienalgunas veces como la mayor parte del tiempo funciona fuera de la caja)
Todo lo que tengo son relaciones padre / hijo entre 2 modelos
Después de la creación de un registro infantil todo lo que estoy haciendo enafter_create
la devolución de llamada es una actualización (acumule toda la cantidad secundaria en el campo principal para evitar consultas pesadas en el tiempo de ejecución) el campo de la cantidad en la tabla principal / registro modelo
Modelo padre (Payout
)
Modelo infantil esSales Transaction
)
Payout
tiene muchos SalesTransactions
Como se dijo anteriormente al crear la transacción de ventas, estoy actualizando (incrementando para ser preciso) elamount
campo del registro principal (registro de pago) para evitar consultas pesadas en el tiempo de ejecución.
por lo que Pagoamount field
No es más que la suma de toda la cantidad de lasales_transactions
de que pagos
sería tan bueno como decir como sería payout.amount (después de que se ejecuta la devolución de llamada)
payout.amount == payout.sales_transactions.pluck('amount').sum
y que lo que estoy tratando de lograr utilizando devoluciones de llamada
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
La parte interesante aquí es quesometime
cuando SalesTransaction escreated
la devolución de llamada simplemente no se llama ya que no veo el valor de actualización del registro de pagos
Estoy tratando de evitar la devolución de llamada por ahora, pero por el bien de saberwhy
La devolución de llamada no se está ejecutando tieneled me
para hacer esta pregunta
No hay Validación ni en la tabla de Transacciones de Ventas y Pagos (lo he comprobado 1000 veces)Payout.validators
=> []
SalesTransaction.validators
=> []
No hay problema de asignación masiva como no he definidoattr_accessible
oattr_protected
(Compruebo esto también y, como he dicho, funciona la mayor parte del tiempo, lo que no habría sido el caso con la advertencia de asignación en masa)
El registro de transacción de ventas se crea todo el tiempo, solo el registro de pagos no se actualiza (sometime
)
He eliminado la mayoría de las asociaciones no deseadas (aquí) desales_transactions
ypayouts
por brevedad del código
No, no hay nada comoaccepts_nested_attributes_for
en cualquiera de los modelos
Sin validaciones dinámicas adjuntas, extra, extra
Por último aquí cómo estoy tratando de crear elSalesTransaction
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)