🏢

【Rails】buildメソッドの使い分け(1対1、1対多、多対多)

2024/07/26に公開

buildメソッド

  • インスタンスを生成するメソッド
  • newメソッドと同じ
  • DBに保存はされずにインスタンス生成のみ
  • モデルを関連付ける時に使われる

関連付けによっての使い方の違い

1対1:build_関連付けのメソッド名(単数形)
1対多:関連付けのメソッド名(複数形).build
多対多:関連付けのメソッド名(複数形).build

以下に具体的な使用例を示します。

userとprofile(1対1)

userモデル

class User < ApplicationRecord
  has_one :profile
end

prifileモデル

class Profile < ApplicationRecord
  belongs_to :user
end

使用例

@user = User.new
@profile = @user.build_profile(profile_params)

userとpost(1対多)

userモデル

class User < ApplicationRecord
  has_many :posts
end

postモデル

class Post < ApplicationRecord
  belongs_to :user
end

使用例

@user = User.new
@post = @user.posts.build(post_params)

postとtag(多対多)

postモデル

class Post < ApplicationRecord
  has_many :tagging
  has_many :tags, through: :tagging
end

tagモデル

class Tag < ApplicationRecord
  has_many :tagging
  has_many :posts, through: :tagging
end

taggingモデル(中間テーブル)

class Tagging < ApplicationRecord
  belongs_to :post
  belongs_to :tag
end

使用例

@post = Post.new
@tag = @post.tags.build(tag_params)

Discussion