所以我遇到了一些有点奇怪的东西需要帮助
我有以下三种模型,它们的关系如下所示
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
时始终都有数据。
答案 0 :(得分:0)
您无法从set
获得任何肮脏的更改,您必须使用after_commit
,类似于:
around_save