1

我有两个模型,用户和配置文件,一对一的关系,如果它还不存在,我正在尝试为用户创建一个新的配置文件:

user = User.includes(:profile).find( params[:user_id] )

unless user.profile.present?
  user.profile.create
end

但我收到一个错误:nil:NilClass 的未定义方法“创建”

4

1 回答 1

9

嗯,有两件事。首先,我假设代码是错误的,因为只有在配置文件存在时才会进入块(因此无法创建它)。

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
于 2012-04-29T00:33:50.503 回答