Ruby on rails `查找或创建用户!`和一个'after_initialize'回调
我们有类似于:Ruby on rails `查找或创建用户!`和一个'after_initialize'回调,ruby-on-rails,activerecord,callback,rails-activerecord,Ruby On Rails,Activerecord,Callback,Rails Activerecord,我们有类似于: class User < ActiveRecord::Base #... after_initialize do |user| # stuff1 end end User.find_or_create_by!(email: data[:email]) do |user| # stuff2 relying on code from the after_initialize end class用户
class User < ActiveRecord::Base
#...
after_initialize do |user|
# stuff1
end
end
User.find_or_create_by!(email: data[:email]) do |user|
# stuff2 relying on code from the after_initialize
end
class用户
stuff2
的执行依赖于stuff1
已运行,我们得到一个指示stuff1
未运行的崩溃
这可以通过使用find\u或\u initialize\u by(..)来解决。轻触,但仍会留下一些问题:
哪些回调实际上是由find\u或触发的?(对于查找\u或通过初始化\u,同上)
…为什么初始化后不运行
当find\u或\u create
实际找到所需的对象时,after\u initialize
块是否有可能不运行?当find\u或
找不到对象并且必须创建它时,会运行after\u initialize
块。另外,您确定要持久化stuff1
中发生的任何事情吗?不过,为了回答您的第一个问题,find\u或\u create\u by
将在\u find
和/或初始化后触发回调。@mmichael我们肯定会坚持,因为我们在其他地方没有看到该错误。我不知道它是否被覆盖,然后stuff1
被重新应用@VAD我认为您的想法是正确的,find
和create
之间的回调链是不同的。