1

ユーザーとプロファイルの2つのモデルが1対1の関係にあり、ユーザーの新しいプロファイルがまだ存在しない場合は、それを作成しようとしています。

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

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

しかし、エラーが発生します:nil:NilClassの未定義のメソッド `create'

4

1 に答える 1

9

さて、2つのこと。まず、プロファイルがそこにある場合にのみブロックに入る(したがって作成できない)ため、コードが間違っていると思います。

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 に答える