Rails:before_destroy不更新父级

时间:2013-05-25 01:15:50

标签: ruby-on-rails ruby-on-rails-3 activerecord rails-activerecord

在我的rails应用中,我有一个Donation model,它有一个名为status(整数)的属性和一个子模型called Delivery。捐款has_one delivery

在交付模式中,我有回调

class Delivery < ActiveRecord::Base

  belongs_to :donation

  after_create :increment_donation_status
  before_destroy :zero_donation_status

  def increment_donation_status
    self.donation.status += 1
    self.donation.save
  end

  def zero_donation_status
    self.donation.status = 0
    self.donation.save
  end
end

当我创建一个交付时,它正确运行increment_donation_status,并且捐赠的状态会增加。但是,当我销毁交货时,交货会被销毁,但捐款的状态永远不会被设置为0。

我已尝试同时使用before_destroyafter_destroy。我也尝试在zero_donation_status中放置一个打印语句,它有效。但是,当我尝试打印self.donation.id时,这不起作用。出于某种原因,在运行销毁回调时,似乎交付对象无法引用其父捐赠。

1 个答案:

答案 0 :(得分:0)

发现问题。即使我有从捐赠到交付的一对一关系,我正在删除的交付实际上指的是捐赠两次交付。因此,它无法解析self.donation。糟糕。