Ruby on rails rails回调没有得到执行

Ruby on rails rails回调没有得到执行,ruby-on-rails,activerecord,ruby-on-rails-3.2,rails-activerecord,Ruby On Rails,Activerecord,Ruby On Rails 3.2,Rails Activerecord,在我的一生中,我一直在努力找出为什么我的回调有时不会执行(你听对了,有时会执行,因为大多数时候都是开箱即用) 我所拥有的只是两个模型之间的父/子关系 创建子记录后,我在创建后的中所做的一切都是更新父表/模型记录中的金额字段(累积父字段中的所有子金额,以避免在运行时进行繁重的查询) 父模型(支出) 子模型为(销售交易记录) 支出有许多销售交易如上所述,在创建销售交易时,我正在更新(精确地说是递增)父记录(支出记录)的金额字段,以避免在运行时进行繁重的查询 所以支出金额字段只不过是该支出的销售交易的

在我的一生中,我一直在努力找出为什么我的回调有时不会执行(你听对了,有时会执行,因为大多数时候都是开箱即用)

我所拥有的只是两个模型之间的父/子关系

创建子记录后,我在创建后的
中所做的一切都是更新父表/模型记录中的金额字段(累积父字段中的所有子金额,以避免在运行时进行繁重的查询)

父模型(
支出

子模型为(
销售交易记录

支出
有许多
销售交易
如上所述,在创建销售交易时,我正在更新(精确地说是递增)父记录(支出记录)的
金额
字段,以避免在运行时进行繁重的查询

所以支出
金额字段
只不过是该支出的
销售交易
的所有金额的总和

这和payout.amount一样好(在执行回调后)

payout.amount==payout.sales\u交易。pull('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

SalesTransaction.create(options)

我想对Viren发表评论。尝试
SalesTransaction.create(带感叹号)。然后,您是否一致地看到批量分配错误?

请在保存后而不是创建后重试。

我首先想到的是Payout类不是从ActiveRecord::Base继承的。另外,我对注2感到困惑。您是否在application.rb文件中禁用了白名单属性,这就是您不使用attr_accessible的原因?否则,需要定义该属性列表。假设这两个问题不是罪魁祸首,这应该可以工作,因为我刚刚测试过它。@Keith我很抱歉纠正了打字错误it@Keith关于我提到的白名单,我没有在支付模型中定义任何
attr_accessible
attr_protected
,同样在同一点
#2
中提到,如果是大规模分配,它会失败
始终
而不是
有时
不,销售交易记录正在创建,只有付款列
更新
不起作用
有时
我也检查了付款模型中的批量分配
  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}