【发布时间】:2017-05-08 15:46:23
【问题描述】:
好的,偶然发现了这个奇怪的东西。我的用户模型中有这个。
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。
【问题讨论】:
-
你有哪些模型验证?
-
我正在使用带有
:validatable选项的设计。除此之外没有什么。所以基本的电子邮件和密码验证
标签: ruby-on-rails activerecord callback ruby-on-rails-5.1