Skip to content

Instantly share code, notes, and snippets.

@seak0503
Last active May 19, 2024 03:05
Show Gist options
  • Save seak0503/7291012e7e99fc8aca80 to your computer and use it in GitHub Desktop.
Save seak0503/7291012e7e99fc8aca80 to your computer and use it in GitHub Desktop.
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歳")

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

わかりやすかったです!!
ありがとうございます!!

@Kazzuki
Copy link

Kazzuki commented Mar 4, 2020

助かりました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment