我有两个模型,用户和配置文件,一对一的关系,如果它还不存在,我正在尝试为用户创建一个新的配置文件:
user = User.includes(:profile).find( params[:user_id] )
unless user.profile.present?
user.profile.create
end
但我收到一个错误:nil:NilClass 的未定义方法“创建”
我有两个模型,用户和配置文件,一对一的关系,如果它还不存在,我正在尝试为用户创建一个新的配置文件:
user = User.includes(:profile).find( params[:user_id] )
unless user.profile.present?
user.profile.create
end
但我收到一个错误:nil:NilClass 的未定义方法“创建”
嗯,有两件事。首先,我假设代码是错误的,因为只有在配置文件存在时才会进入块(因此无法创建它)。
if user.profile.blank?
user.profile.create
end
看起来更正确的代码。
其次,当您使用 has_one 时,您不会像使用 has_many 那样使用 .create。这是因为直接返回关系对象,而不是像 has_many 这样的“代理”方法。等效方法是 create_profile(或 create_x,其中 x 是对象)
因此,请尝试以下代码:
if user.profile.blank?
user.create_profile
end