好的,偶然发现了这种奇怪。我的用户模型中有这个。
after_create :assign_role, :subscribe_to_basic_plan
def assign_role
self.role = 1
self.save
end
def subscribe_to_basic_plan
self.customer_id = "hello"
self.save
end
(代码简化用于说明目的)
当我创建用户并在控制台中检查它时,我得到role: 1, customer_id: nil
。但是!如果我从第一个回调中删除保存,一切正常。
after_create :assign_role, :subscribe_to_basic_plan
def assign_role
self.role = 1
end
def subscribe_to_basic_plan
self.customer_id = "hello"
self.save
end
生成role: 1, customer_id: "hello"
。所以看起来它只读取回调中的第一个.save
。我想了解确切的行为和原因是什么。我花了很多时间来确定这一点,并且不想再次发现类似的东西。
编辑:
也许这很有帮助。当我使用self.save时!在subscribe_to_basic_plan
中我收到错误,记录根本没有保存。将self.save!
放在assign_role中并不会改变任何内容,所以问题肯定出在第二个.save
上。
答案 0 :(得分:1)
这个答案是理论上的,因为我需要确定完整的模型代码。
很可能你在assign_role中的第一次保存由于某种原因失败了。当它失败并且返回时会导致rails跳过它之后的所有回调。然后你的第二个回调根本不会运行。
我首选订单中的可能解决方案: