1. ホーム
  2. ruby-on-rails

[解決済み] Railsです。railsでhas_oneアソシエーションを使ったbuildの使い方

2022-05-01 01:55:37

質問

この例では user を使用せず profile を作成し、後で profile をそのユーザーのために使用します。私はビルドを has_one の関連付けが必要ですが、これは吹き飛んでしまいました。これがうまくいく唯一の方法は has_many . その user は、最大で1つだけ持つことになっています。 profile .

私はこれを試しています。私は持っています。

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

でも、そうすると

user.build_profile 

エラーが出ます。

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'profiles.user_id' in 'where clause': SELECT * FROM `profiles` WHERE (`profiles`.user_id = 4)  LIMIT 1

railsでアソシエーションを0か1かにする方法はありますか?

どのように解決するのですか?

その build メソッドのシグネチャは has_onehas_many の関連付けを行います。

class User < ActiveRecord::Base
  has_one :profile
  has_many :messages
end

のビルド構文は以下のとおりです。 has_many を連想させる。

user.messages.build

のビルド構文は以下のとおりです。 has_one を連想させる。

user.build_profile  # this will work

user.profile.build  # this will throw error

を読み取る。 has_one アソシエーション ドキュメント をクリックすると詳細が表示されます。