Rails 3 undefined方法`create'for nil:尝试创建相关对象时出现NilClass错误

时间:2012-04-29 00:14:27

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

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

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

但是我收到一个错误:未定义的方法`create'代表nil:NilClass

1 个答案:

答案 0 :(得分: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