fire_commit触发但未捕获属性更改

时间:2017-06-07 13:12:27

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

所以我遇到了一些有点奇怪的东西需要帮助

我有以下三种模型,它们的关系如下所示

class Assignment < ActiveRecord::Base
  belongs_to :case_status
  has_one :application, :through => :case_status, :autosave => false 
  after_create :update_status

  def update_status
    self.case_status.update_attributes!({loan_case_id: update_case_status_id})
  end
end

class CaseStatus < ActiveRecord::Base
  belongs_to: application
  has_many :assignments, :dependent => :destroy
  accepts_nested_attributes_for :assignments,
                                :allow_destroy => true,
                                reject_if: proc { |attr| attr["lender_id"].blank? && attr["banker_id"].blank? }

  after_commit :catch_previous_changes,on: :update

  def catch_previous_changes
    self.previous_changes
  end
end

class Application < ActiveRecord::Base
  has_one :case_status, :dependent => :destroy
end

基本上,在创建赋值时,有一种方法可以更新case_status模型上该记录的loan_case_id,但是当调用self.versions代码时,它总是为空。

但是当我检查rails控制台上的记录时,数据已经更新,这使我了解after_commit调用正在被触发,但稍微领先于具有先前属性{{}的更改的线程1}}。

现在我不知道如何调试它以了解为什么会发生这种情况,因为它只会在通过after_create方法完成d更新时发生。 loan_case_id更新的任何其他形式在调用loan_case_id时始终都有数据。

1 个答案:

答案 0 :(得分:0)

您无法从set获得任何肮脏的更改,您必须使用after_commit,类似于:

around_save