【rails】ユーザーと記事の紐づけ①(dbにカラム追加)

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

リレーションとは

アプリケーションにおいて繋がっているデータの関連性をリレーションという

リレーションの例
  • ユーザー ↔ 記事
  • ユーザー ↔ プロフィール
  • ユーザー ↔ フォロワー 等

個々に存在しているものを紐づける必要がある


user_id

  • usersテーブルにはユーザーの情報(user_id・email)が入っている
  • articlesテーブルには記事の情報(title・content等)が入っている

articlesテーブルに、usersテーブルのuser_idのカラムを追加する


migrationファイルを作成する

migrationファイルを作ってデータベースの情報を変える

rails g migration AddUserIdToArticles

実行するとVScodeのdb/migrateにファイルが増えている

AddUserIdToArticlesの名前について
  • カラムを追加するとき「Add」をつける
  • 追加したいカラム名「UserId」を入れる
  • 「To」で、テーブルにカラムを追加する
  • 追加したいテーブル「Articles」を入れる


関連性を作るなら「add_reference」

db/migrate/日付_add_user_id_to_articles.rbを開く

カラムを追加するコードは複数あるが、railsの用意したadd_referenceを使うのが良い

class AddUserIdToArticles < ActiveRecord::Migration[6.0]
  def change
    add_reference :articles, :user
  end
end

user_idを入れるだけじゃなく、検索のしやすさなどのパフォーマンスが向上する

↓ migtationをデータベースに反映させる

rails db:migrate

基本的な書き方「add_column」

add_column :articles, :user_id, :integer
  • カラムを追加するとき「add_column
  • 追加したいテーブル「:articles
  • カラム名「:user_id
  • 型「:integer」(整数)

これはカラムを追加する基本的な書き方だが、関連性を作るには適していない


db/schema.rbでデータベースが変更されているか確認

articlesテーブルにuser_idが追加されている

ActiveRecord::Schema.define(version: 2024_08_25_120840) do
    # 中略
 t.integer "user_id"

このままでは使えないので、モデルにも変更を加える

#DAY20