在使用 Devise Mongoid 进行身份验证期间在 Mongoid 中创建有关对象创建的嵌入式文档

Create embedded document on object creation in Mongoid during authentication with Devise an Mongoid

我有一个 class 用户

  class User
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_one :profile

和 class 个人资料

class Profile
include Mongoid::Document
include Mongoid::Timestamps

embedded_in :user

我正在使用 devise 和 mongoid 对用户进行身份验证,并使用以下方法存储用户信息:

def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
      # Store information in user's profile
      user.profile.first_name = auth['info']['first-name']
      user.profile.last_name = auth['info']['last-name']
      user.profile.profile_picture = auth['info']['picture-url']
      user.profile.linkedin = auth['info']['public-profile-url']
    end
  end

但我总是遇到以下错误

undefined method `first_name=' for nil:NilClass

创建一个新的配置文件对象,将用户作为属性

profile = Profile.create({
  :user => user,
  :first_name => auth['info']['first-name'],
  :last_name => auth['info']['last-name'], ....})