ruby-on-rails 为什么在Rails应用的模型中使用动作“after_create”时外键被设置为null?

idfiyjo8  于 2023-03-04  发布在  Ruby
关注(0)|答案(1)|浏览(126)

下面的代码块是我的模型的外观。

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?

nfzehxib

nfzehxib1#

Rails将其对数据库的更改 Package 在一个事务中,并且after_createafter_update回调在该事务中运行,这意味着当您调用after_create方法时,对数据库的更改不会实现,这将导致'parent_model_id'的值为null
创建和更新记录时会发生after_update回调。在这种情况下,“parent_model_id”将始终可用,并且不会引发错误。
您可以使用另一个名为after_commit的回调函数,它在数据库的所有更改都完成时调用,并且在这两种情况下都会发生;从而创建新记录并更新现有记录。

相关问题