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

NOTA

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)

Respuestas a la pregunta(1)

Su respuesta a la pregunta