RoR - 模型after_create外键为null

时间:2017-04-05 14:14:30

标签: ruby-on-rails ruby-on-rails-4 model after-create

这是我模型的样子:

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中的外键,那么就可以了。 这是怎么回事?

1 个答案:

答案 0 :(得分:0)

Rails将事务中的每个数据库更改都包装起来,并在该事务中运行after_create和after_update回调。这意味着,当您调用after_create方法时,数据库更改不会完成,并且您将获得parent_model_id的空ID。

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

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