buildメソッドって?

インスタンスを生成するメソッド。モデルの関連付けでも用いられる。 newメソッドと同じ使い方をするが、モデルの関連付けの際には、暗黙のルールとしてbuildメソッドを使う。

buildの記述方法

全部で3パターン。モデルの同士の関連付けで変わってくる。 1. アソシエーションが1対1 2. アソシエーションが1対多 3. アソシエーションが多対多

1対1の場合

ユーザーが予定を1つ持っている場合として、

class User < ActiveRecord::Base
  has_one :plan
end
class Plan < ActiveRecord::Base
  belongs_to :user
end

このような1対1関係では、build_関連付けのメソッド名となります。

@user = User.new
@plan = @user.build_plan

1対多の場合

ユーザーが予定を複数持っている場合として、

class User < ActiveRecord::Base
  has_many :plans
end
class Plan < ActiveRecord::Base
  belongs_to :user
end

このような1対多関係では、関連付けのメソッド名.buildとなります。

@user = User.new
@plan = @user.plans.build

多対多の場合

多対多の場合中間テーブルを作るため、以下のようにモデルを作成します。

class User < ApplicationRecord
  has_many :group_users
  has_many :groups, through: :group_users
end
class Group < ApplicationRecord
  has_many :group_users
  has_many :users, through: :group_users
end
class GroupUser < ApplicationRecord
  belongs_to :group
  belongs_to :user
end

このような多対多関係では、1対多と同様に関連付けのメソッド名.buildとなります。

@user = User.new
@group = @user.groups.build

buildでも場合分けするので覚えなければ!

参考

techtechmedia.com