真実の楽譜(フルスコア)

プログラム関係の忘備録になるはず

Railsで簡易ブログを作る その2

前回やったこと

Railsアプリケーションとデータベースを新規作成し、
ローカル環境上で動くことを確認。
truthfullscore.hatenablog.com

今回やること

  • モデルのテーブルをデータベースに追加
  • モデルのアソシエーション

テーブルの定義

今回はユーザーと投稿の情報を持つテーブルを作ります。
ログイン機能とユーザー情報はRailsのgemであるdeviseを使用し、
ブログの投稿情報はシンプルにタイトルと本文だけを持つものとします。

usersテーブル

オプション
id int8 null: false, unique: true
nickname varchar null: false, index: true
encrypted_password varchar null: false
... 以下略 ...

postsテーブル

オプション
id int8 null: false, unique: true
title varchar null: false, index: true
article text null: false
user_id int8 null: false, foreign_key: true

ユーザー(user)と投稿(post)は1:Nの関係
この情報をrailsアプリケーションに登録していきましょう。

deviseを導入しuserモデルの作成とデータベース作成

Gemfileを開き末尾に追加

gem "devise"

以下のコマンドでgemファイルをインストール

$ bundle install

以下のコマンドでdevice用のファイルとuserモデルを作成

$ rails g devise:install
$ rails g devise user

この時に作られたマイグレーションファイル(db\migrate内)を開き、
ユーザー名(nickname)のカラム情報を追加。

create_table :users do |t|
    ## Database authenticatable
    t.string :nickname,           null: false, index: true

マイグレーションを実行してデータベース上にusersテーブルを作成。

$ rake db:migrate

postモデルの作成とデータベース作成

以下のコマンドでpostモデルを作成

$ rails g devise post

この時に作られたマイグレーションファイル(db\migrate内)を開き、
postsテーブルの各カラム情報を追加

def change
  create_table :posts do |t|
    t.string      :title, null: false
    t.text        :article, null: false
    t.references  :user, null: false, foreign_key: true
    t.timestamps
  end
end

マイグレーションを実行してデータベース上にpostsテーブルを作成。

$ rake db:migrate

これでブログアプリケーションに必要なテーブルがデータベースに追加されました。

アソシエーションの追加

テーブルの定義でも書きましたが、
ユーザー(user)と投稿(post)は1:Nの関係
となるため、その関係性をそれぞれのモデルクラスに記述します。

user.rb

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :posts
end

post.rb

class Post < ApplicationRecord
  belongs_to :user
end

これでブログを扱うためのデータが完成しました。
次回はアプリケーションの画面を作っていこうと思います。