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