モデルの作成

テーブルを設計する

今回作成するアプリケーションに必要なテーブルの設計をする。

今回必要なテーブルとしては、

ユーザーの情報を登録するUsersテーブル。

本の情報を登録するBooksテーブルの2つのテーブルが必要となる。

まずはUsersテーブルについて設計する。

カラム名 データ型 カラムの説明
id integer userを識別するID
name string userの名前
introduction text userの自己紹介

次に、Booksテーブルの設計をする。

カラム名 データ型 カラムの説明
id integer bookを識別するID
title string bookのタイトル
body text bookの説明
user_id integer bookを投稿したユーザーID

モデル・テーブルの作成

Userモデル・usersテーブル

上記で設計したモデル・テーブルを作成・編集していく。

まずは、Userモデルについて、

Userモデルはdeviseの導入の際に、作成が完了しているが、

introductionカラムが足りないため、追加を行う。

カラムの追加は下記のコマンドを実行する。

($ rails generate migration Addカラム名Toテーブル名 カラム名:データ型)
$ rails g migration AddIntroductionToUsers introduction:text

上記を実行すると、下記のようなマイグレーションファイルが作成される。

ファイルの記述が問題ないことを確認し、migrateする。

$ rails db:migrate
Bookモデル・booksテーブル

次にBookモデルの作成を行う。

モデルを作成するコマンドは以下となる。

($ rails g model モデル名)
$ rails g model Book

上記を実行すると下記のようなファイルが生成される。

Running via Spring preloader in process 4458
      invoke  active_record
      create    db/migrate/20230722132211_create_books.rb
      create    app/models/book.rb
      invoke    test_unit
      create      test/models/book_test.rb
      create      test/fixtures/books.yml

作成されたマイグレーションファイルにカラムを追加していく。

class CreateBooks < ActiveRecord::Migration[6.1]
  def change
    create_table :books do |t|
      t.string :title   #追加
      t.text :body   #追加
      t.integer :user_id   #追加
      
      t.timestamps
    end
  end
end

上記のようにマイグレーションファイルに記述し、migrateする。

$ rails db:migrate

db/schema.rbに今回追加したテーブルカラムが記述されていることを確認する。

アソシエーションの記述

User モデルに対して、Book モデルが 1:N になるよう関連付けます。下記の記述をモデルに追記する。

models/user.rb

has_many :books, dependent: :destroy

models/book.rb

belongs_to :user

以上。

アプリケーションの作成 参考URL  作成するアプリケーションについて - takifugu’s blog