railsでbelongs_toを使用した1対多のマイグレーションを作成する

rails

本記事では、1対多のマイグレーションファイルの作成方法について説明していきます。自分自身、モデルを作成するときに、1対多のモデル作るときにどういう手順で作ったかを調べ直したり、どちらに依存関係のmodelのidを持たせるのかなど忘れがちなので、自分の見返すようのメモとしても書いていきます!

1対多の構造について

1対多の構造はtwitterを例にするとわかりやすいです。一人のユーザーは複数のtweetをすることができますが、tweetは一人のユーザーからしか投稿されません(共同で一つの投稿はできません)。

このような構造を1対多構造と言います。このとき、1対多の1の方を親テーブル、多の方を子テーブルと言います。1対多のテーブルを作成する場合は、子テーブルにどの親テーブルに属しているかを参照するために、外部キーというものを持たせる必要があります。

1対多のリレーションテーブルを作成する際に非常に重要な概念であり、この構造を知っておくとテーブル作成がスムーズになります。1対多構造を作成する際は、子テーブルに外部キーを持たせると覚えておきましょう。

それでは、実際にrailsで1対多構造を作成していきます!

1対多のモデル・マイグレーションファイルを作成する

まずは親テーブルであるuserモデルを作成します。

rails g model User name:string

続いて、子テーブルであるtweetモデルを作成します。このとき、参照する親モデルをreferencesで指定する必要があります。

rails g model Tweet text:text user:references

上記のリファレンスを指定すると、tweetのmodelとmigrationファイルが以下のようになります。

class Tweet < ApplicationRecord
  belongs_to :user
end
class CreateTweets < ActiveRecord::Migration[6.1]
  def change
    create_table :tweets do |t|
      t.string :tweet_id
      t.references :user, null: false, foreign_key: true
      t.text :text

      t.timestamps
    end
  end
end

子モデルのほうにreferencesで親モデルを指定することで、自動的にmodel、migrationファイルを作成することができます!

コメント

タイトルとURLをコピーしました