Ruby on rails Rails first_或_初始化不';我不能及时设置id吗?

Ruby on rails Rails first_或_初始化不';我不能及时设置id吗?,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,我在初始化新用户时有非常奇怪的行为 我运行类似于@user=user.where(:provider=>@provider,:uid=>@shop[:uid])的代码。首先\u或\u初始化 设置所有需要的数据,然后保存@user.save 但当我在保存到Worker后立即传递用户id时 EmailWelcome.perform\u async@user.id 它将nil作为用户id传递。。所以我的问题是,有没有人见过*_初始化方法的这种行为?我应该怎么做 编辑:还需要指出的是,它将记录保存在DB

我在初始化新用户时有非常奇怪的行为

我运行类似于
@user=user.where(:provider=>@provider,:uid=>@shop[:uid])的代码。首先\u或\u初始化

设置所有需要的数据,然后保存
@user.save

但当我在保存到Worker后立即传递用户id时

EmailWelcome.perform\u async@user.id

它将
nil
作为用户id传递。。所以我的问题是,有没有人见过*_初始化方法的这种行为?我应该怎么做


编辑:还需要指出的是,它将记录保存在DB中

您必须检查用户是否成功保存

@user = User.where(:provider => @provider, :uid => @shop[:uid]).first_or_initialize

if @user.save
  EmailWelcome.perform_async @user.id
else 
  p @user.errors
end

或者使用
@user.save,如果保存失败,这种方式将引发异常。

在将id发送给工作进程时,是否确定id为零?或者工作进程无法根据作业的id找到用户


如果您使用的是诸如resque或sidekiq之类的工作进程,则在事务完成之前,它将无法访问用户。如果这是问题所在,您需要在提交后使用
,或者在事务完成后使用其他方式将
EmailWelcome
作业排队。

我只是在寻找相同问题的答案。我有多个数据库,它正在开发中,但没有登台

暂存列上的id列缺少自动递增序列(在postgres中)

还有什么要你检查的


HTH

忘了说,它将条目保存在DB@AigarsCibuļskis您可以发布更多代码来演示您的问题吗?