0
0

外部キーreferencesを使ったRailsモデルの関連付け

Posted at

references型とは

Ruby on Rails のマイグレーションで使われるデータ型の一つで、
他のモデルへの関連付け(リレーションシップ)を表すために使用されます。

使用例

例えば、コメント(Comment)が投稿(Post)に属しているという関係を設定したい場合、以下のようなマイグレーションを生成します。

rails generate migration Comment Post:references

これにより生成されるマイグレーションファイルには、post_idカラムを posts テーブルに追加するコードが含まれます。さらに、post_id カラムには外部キー制約とインデックスが設定されます。

生成後(models) belongs_to

コマンド入力後、models配下のcomment.rbに以下のコードが生成されます。
単数形であることに注意
belongs_to :モデル名(単数形)

class Comment < ApplicationRecord
  belongs_to :post
end

belongs_toとは

モデル間の関連付けを定義するためのメソッド。
あるモデルが他のモデルに「属している」(belong to)ことを示します。

マイグレーションファイルもチェック

class CreateAnswers < ActiveRecord::Migration[7.0]
  def change
    create_table :answers do |t|
      t.string :name
      t.text :content
      t.references :question, null: false, foreign_key: true

      t.timestamps
    end
  end
end

t.references
answersモデルと紐づきがある事を示している

null: false
カラムがnullになることを禁止
このオプションを適用することで、そのカラムには必ず値が入力される必要があり、データベースをからに references型とは

Ruby on Rails のマイグレーションで使われるデータ型の一つで、
他のモデルへの関連付け(リレーションシップ)を表すために使用されます。

使用例

例えば、コメント(Comment)が投稿(Post)に属しているという関係を設定したい場合、以下のようなマイグレーションを生成します。

rails generate migration Comment Post:references

これにより生成されるマイグレーションファイルには、post_idカラムを posts テーブルに追加するコードが含まれます。さらに、post_id カラムには外部キー制約とインデックスが設定されます。

生成後(models) belongs_to

コマンド入力後、models配下のcomment.rbに以下のコードが生成されます。

class Comment < ApplicationRecord
  belongs_to :post
end

belongs_toとは

モデル間の関連付けを定義するためのメソッド。
あるモデルが他のモデルに「属している」(belong to)ことを示します。

マイグレーションファイルもチェック

class CreateAnswers < ActiveRecord::Migration[7.0]
  def change
    create_table :answers do |t|
      t.string :name
      t.text :content
      t.references :question, null: false, foreign_key: true

      t.timestamps
    end
  end
end

t.references
answersモデルと紐づきがある事を示している

null: false
カラムがnullになることを禁止
このオプションを適用することで、そのカラムには必ず値が入力される必要があり、データベースを空のままにするのを防ぎます。

foreign_key: true
外部キー制約のオプションを有効にしている
このオプションを適用することで、親テーブルに対象が存在しない場合、子テーブルの保存ができない設定。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0