在使用 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'], ....})
我有一个 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'], ....})