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でも場合分けするので覚えなければ!
参考