ume

rails6 has_manyとhas_oneの関連メソッド(関連データ登録)

前書き

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)などで書き方が変わる