前書き
has_manyとhas_oneで同じ意味のメソッドでも少し書き方が違い. その違いを知らず何度もハマったので記事に残します。
関連データの登録
1対1の場合(has_one)
親(Car).
子(Engine)
class Car < ActiveRecord::Base has_one :engine end
class Engine < ActiveRecord::Base belongs_to :car end
この時,EngineテーブルにUserテーブルの外部キー(user_id)がありEngineテーブルにデータを登録したい場合
メソッド名: build_関連付けメソッド名 使用例: @car.build_engine(name: "エンジン1")
このように書く
1対多の場合(has_many)
class Car < ActiveRecord::Base has_many :wheels end
class Wheel < ActiveRecord::Base belongs_to :car end
このようなルールでデータ登録
メソッド名: 関連付けメソッド名.build 使用例(関連付け一つの場合): @car.wheels.build(name: "車輪1") 使用例(関連付け複数の場合): @car.wheels.build({ name: "車輪1" }, { name: "車輪2" })
まとめ
- 同じbuildメソッドでも関係性(has_oneかhas_many)などで書き方が変わる