下面的代码块是我的模型的外观。
class MyModel < ActiveRecord::Base
belongs_to :parent_model
after_create :create_model
after_update :update_model
def create_model
# some code goes here
puts "Parent id: " + self.parent_model_id.to_s
# parent_model_id is nil here
end
def update_model
puts "Parent id: " + self.parent_model_id.to_s
# parent_model_id is as it should be
end
end
我想访问它的after_create
末尾的外键值,但是它是nil
,抛出异常,即使其他字段不是nil
,即模型本身的字段,但是外键是nil。
如果我尝试使用after_update
访问外键,它可以工作。
在模型中使用操作after_create
时,为什么外键设置为null?
1条答案
按热度按时间nfzehxib1#
Rails将其对数据库的更改 Package 在一个事务中,并且
after_create
和after_update
回调在该事务中运行,这意味着当您调用after_create
方法时,对数据库的更改不会实现,这将导致'parent_model_id'的值为null
。创建和更新记录时会发生
after_update
回调。在这种情况下,“parent_model_id”将始终可用,并且不会引发错误。您可以使用另一个名为
after_commit
的回调函数,它在数据库的所有更改都完成时调用,并且在这两种情况下都会发生;从而创建新记录并更新现有记录。