見出し画像

データベースの作成


今回はユーザ情報や投稿情報など様々なオブジェクトを保存しておける大切なデータベースの作成方法を記載したいと思う。

Railsのモデル

モデルとは、データの操作やビジネスロジックの集まり
Webアプリケーションでデータベースからデータを取り出したり、保存したり、データ構造を定義するのがモデルの大きな役割の1つ

データベース

データベースとは整理されたデータの集合体
必要に応じて、データを作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)する機能
このCreate、Read、Update、Deleteの頭文字をとってCRUD(クラッド)処理と呼ぶ
CRUD処理はデータベースのごく基本的な処理

テーブル

今回作るWebアプリケーションでは、1つのデータベースを作成/使用
1つのデータベースには、複数のテーブルを作成する
例えば、ユーザーのデータ一覧を保存するUserテーブル、投稿のデータを保存するTopicテーブル
テーブルはエクセルのシートのようなもの
テーブルの中身
・カラム
カラム(列)はテーブル(表)の各項目に相当
「名前」「メールアドレス」「住所」といった具合
・レコード
テーブル(表)の各データに相当エクセルのシートでいうと
カラム(列)は縦、レコード(行)は横だとと覚える

RDBMSの制約

RDBMSにはレコード(行)が1つに特定できないといけないという制約がある
同じデータを複数のレコードとして保存するそのため、必ずデータを一意に特定するためのカラムが必要
一意のデータで構成されるカラムのことをプライマリキー(主キー)

Userモデル、migrationファイルを作る

モデルは、コントローラと同じように、rails gコマンドで作成
$ rails g model User
このコマンドタイプするとdb/migrates/以下に、migrationファイルと呼ばれるファイルが作成される
migrationファイル
本来、データベースを作るためには、データベースにログインし、SQL(Structured Query Language)と呼ばれる言語で操作する必要
その作業を簡単にするためにmigrationファイルは存在している
migrationファイルを作成、編集した後にRailsコマンドをタイプすることで、migrationファイルを読み込み、データベース構造を作成(SQLを使う必要がない)

migrationファイルの編集

migrationファイルは、changeというメソッドで、作成や変更を指定
それではmigrationファイルを以下のように編集
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
end
create_tableはテーブルを作るためのメソッド
create_tableの「t.」に続く「string」が型で、その後に続く「:name」「:email」などがカラム名

migrationファイルの読み込み

migrationファイルを読み込むためには、rails db:migrateコマンドを使用
$ rails db:migrate
migrateコマンドで、上記のmigrationファイルを適用させると、以下のような構造でusersテーブルが作成
名前 型id | integername | stringemail | stringcreated_at | datetime
idカラムはどのテーブルにも自動的に入る
created_atとupdated_atは、timestampの型でデータを生成するカラム
created_atはデータを作成した時、updated_atはデータを更新した時にRailsが自動的に時刻を保存してくれるカラム

migrationファイルの状態を戻す

rails db:migrateコマンドを実行してテーブルを作成した際の記述が間違っていて、意図しない名前や型を持つテーブルができることがある時にmigrationファイルを変更してもう一度rails db:migrateをタイプしてもそれではテーブルの変更を行えない
一度読み込んだmigrationファイルは、再度rails db:migrateを実行しても読み込まれないようになっている
$ rails db:migrate
Running via Spring preloader in process 5076
もう一度migrationファイルを読み込むには$ rails db:rollbackというコマンドを実行する必要がある
$ rails db:rollback
Running via Spring preloader in process 77622
== 20171031054127 CreateUsers: reverting ==================================
-- drop_table(:users)
-> 0.0061s
== 20171031054127 CreateUsers: reverted (0.0189s) =========================
※作成されたtableが削除されている
この状態でもう一度rails db:migrateを実行する
$ rails db:migrate
Running via Spring preloader in process 89287
== 20171031054127 CreateUsers: migrating ==================================
-- create_table(:users)
-> 0.0078s
== 20171031054127 CreateUsers: migrated (0.0080s) =========================
このように、migrateファイルをもう一度読み込みたい時は、rails db:rollbackでデータベースの状態を戻す

モデルを扱う

先ほどのrails g model Userコマンドで、app/model/user.rbにUserモデルのファイルが作成されている
class User < ApplicationRecord
end

このclass UserとApplicationRecordの間にある<は、Railsの基礎的なクラス(基底クラス)であるApplicationRecordを継承してUserというクラスを定義するための記述
その結果、Userクラスでは継承元となるApplicationRecordクラスのメソッドが使用可能になる

Userモデルを作成し、migrationを行うことでカラムを作成し、情報を格納できるように行うことができた。やはりモデルを作成した後のファイル操作がまだ慣れていないため、フォルダごとの役割は把握する必要があるなと感じました。今までと違って動作が反映されることでどんどん形になっていくため楽しく感じている。
皆さんにも好評だといいなと思います。
読み返すと読みにくいなとは思いますが、、、

この記事が気に入ったらサポートをしてみませんか?