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
    之间的回调链是不同的。