Rails基礎知識
- データベース
- モデル
データベース
ある特定の条件に当てはまる「データ」を複数集めて、後で使いやすい形に整理した情報のかたまりのことを表します。
例えば、ジムの会員情報をデータベースで扱うなら「会員番号」「名前」「住所」「会員タイプ」等の情報の保存が必要になります。
この情報を元にデータベースのテーブルを作成してその中のカラムとレコードに情報が格納されていくようなイメージです。
※ジムのテーブルを作成したとします。
会員ID | 名前 | 住所 | 会員タイプ |
---|---|---|---|
1 | 山田 太郎 | 〇〇県〇〇市 | フルタイム |
2 | 田中 誠一 | 〇〇県〇〇市 | ナイトタイム |
3 | 佐伯 敬太 | 〇〇県〇〇市 | デイタイム |
テーブル
上記の表の塊がテーブルといいます。
カラムとレコード
表の縦の列をカラムといい、横の列をレコードといいます。
DB設計
アプリケーション開発において大半のデータはデータベース内に保持されます。どのようなデータをどういう形式で設計するかによって、品質は大きく左右されます。例えば、設計図なしに家や車はつくれないのと同様に、データベース設計なしにデータベースを作成するとサービスの重要な部分が成り立たなくなります。
DB設計の手順
- テーブルの抽出
- テーブルの定義
- テーブルの構造を整理
- ER図(テーブルの図)の作成
今回は、簡単なつぶやき投稿アプリの為、3つのテーブルを作成します。
モデル
コントローラでモデルを利用してテーブルからデータを引き出し、ビューに渡すことになります。
モデルファイルを使用するとRailsで、データベースのデータを簡単に扱えるようになります。
モデルを生成する
それでは早速、モデルを生成していきましょう。Railsで、生成するコマンドは以下でしたね。
$ rails g
モデル生成の場合は、
$ rails g model モデルクラス名(全て小文字)
コントローラー同様にこのコマンドを実行するだけで簡単に生成できます。
app/models/〇〇.rb
謝って作成したモデルを削除する場合
$ rails d model モデル名
マイグレーション
モデルを生成したときに「テーブルの設計図」となるマイグレーションファイルも自動で生成されています。ここまででは、まだテーブル生成されていなく、マイグレーションを実行してはじめてテーブルが生成されます。
db/migrate/
マイグレーションファイルにテーブル設計記述
class Tweet < ApplicationRecord
def change
create_table :tweets do |t|
t.string :name
t.text :text
t.text :image
t.timestamps null: true
end
end
end
tweetテーブルにname、text、image、timestampのカラムを設計する記述ができました。
設計ができたら、コマンドでマイグレーションを実行してテーブルを作成しましょう。
$ rake db:migrate
これで、テーブルが生成されました。
カラムの型について
型の種類 | 説明 | 用例 |
---|---|---|
integer | 数字 | ユーザーIDなど |
string | 文字(少) | ユーザー名、パスワードなど |
text | 文字(多) | 投稿文など |
boolean | 真か偽か | 真偽グラフ |
datetime | 日付と時刻 | 作成日時、更新日時など |
スキーマファイル
スキーマファイルは、マイグレーションファイルを実行した際に更新がおこなわれます。そして最新のマイグレーションファイルのバージョンが記録されます。
db/schema.rb
GUIを使ってデータベースを確認する
- Sequel pro
- Tableplus
MYSQLを扱うならどちらかがおすすめです。使い方については割愛します。
Railsコンソールを使ってデータを操作してみる
ターミナルで下記のコマンドを実行すると立ち上がります。
$ rails c
[1] pry(main)> exit
で抜けることができます。
ActiveRecordの知識
RubyのGemの一種です。このGemはモデルとテーブルをつなぎ合わせることで、Railsからテーブルのレコードにアクセスできるようにします。これから出てくるメソッドは、ApplicationRecordというクラスを継承しており、そのクラスにメソッドが定義されているから使用できるようになっています。
allメソッド
allメソッドはApplicationRecordを継承したモデルと結びつくテーブルのレコードを全て取得します。
pry(main)>user = User.all
newメソッド
newメソッドはクラスのインスタンスを生成するメソッドです。
pry(main)>user = User.new(〇〇)
saveメソッド
saveメソッドを実行するとテーブルに保存されます。
newメソッドを保存することに使われることが多いです。
pry(main)>user.save
createメソッド
newとsaveメソッドを一括でおこなってくれます。
pry(main)>user = User.create(〇〇)
find()メソッド
id番号を取得する際に使います。
pry(main)>user = find(idの数値)
find_byメソッド
id以外のカラムを取得します。
pry(main)>user = find_by()