RoR - 模型 after_create 外键为空

RoR - model after_create foreign key is null

这是我的模型的样子:

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 那里并转到 Exception。即使其他字段不是 nil(模型自己的字段),外键也是。

如果我尝试访问 after_update 中的外键,那是可以的。 这是怎么回事?

Rails 将每个数据库更改包装在一个事务中,after_create 和 after_update 回调 运行 在该事务中。这意味着,当您调用 after_create 方法时,数据库更改未完成并且您得到 parent_model_id.

的空 ID

当您创建记录并对其进行任何更改时调用的 after_update 回调。在这种情况下,parent_model_id 将始终可用并且您不会收到错误

您可以再使用一个回调,after_commit。当所有数据库更改完成时,将调用此回调。在这两种情况下都会调用它,创建新记录和更新现有记录。