shimadama
11/30/2015 - 3:12 AM

Railsモデルの関連付けでbuildを使う時のメソッド名

Railsモデルの関連付けでbuildを使う時のメソッド名

Railsモデルの関連付けで、buildを使うときのメソッド名

モデル間の関連付けの際に、データを保存したくない場合はbuildを使うが、 関連付けのパターンによって、メソッド名が変わるので、メモをしておく

1 対 1 の場合

モデル定義

class Car < ActiveRecord::Base
  has_one :engine
end
class Engine < ActiveRecord::Base
  belongs_to :car
end

buildによる関連付け

  • メソッド名: build_関連付けメソッド名

  • 使用例: @car.build_engine(name: "エンジン1")

1 対 N の場合

モデル定義

class Car < ActiveRecord::Base
  has_many :wheels
end
class Wheel < ActiveRecord::Base
  belongs_to :car
end

buildによる関連付け

  • メソッド名: 関連付けメソッド名.build

  • 使用例(関連付け一つの場合): @car.wheels.build(name: "車輪1")

  • 使用例(関連付け複数の場合): @car.wheels.build({ name: "車輪1" }, { name: "車輪2" })

N 対 N の場合

モデル定義

class Car < ActiveRecord::Base
  has_many :race_entries
  has_many :drivers, through: :race_entries
end
class Driver < ActiveRecord::Base
  has_many :race_entries
  has_many :cars, through: :race_entries
end
class RaceEntry < ActiveRecord::Base
  belongs_to :car
  belongs_to :driver
end

buildによる関連付け

  • メソッド名: 関連付けメソッド名.build

  • 使用例: @car.drivers.build(car_id: 1, name: "山田太郎", age: "30歳")

    • これを保存すると、中間テーブルにも自動的に反映される