这是我模型的样子:
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
中的外键,那么就可以了。
这是怎么回事?
答案 0 :(得分:0)
Rails将事务中的每个数据库更改都包装起来,并在该事务中运行after_create和after_update回调。这意味着,当您调用after_create
方法时,数据库更改不会完成,并且您将获得parent_model_id的空ID。
创建记录并在对记录进行任何更改时调用after_update
回调。在这种情况下,parent_model_id将始终可用,您不会收到错误
您可以再使用一个回调after_commit
。完成所有数据库更改后,将调用此回调。它将在两种情况下被调用,创建新记录并更新现有记录。