Rails データベースの作り方(テーブル、カラム含めて)
毎回毎回データベースを作る時に制約やら何やらで調べ直すので自分用メモに。
データベース自体の作成
作っているアプリ名に基づく親玉の作成。
$ rake db:create
これでとりあえずデータベース自体はできました。
ついでにデータベースの削除は
$ rake db:drop
使ったことないけど一応。
database.ymlというファイルにデータベースに関する記述がしてあります。
テーブルモデルの命名規則
私はコントローラーに合わせてつけてます。確かコントローラーとテーブル名が違っても動くらしんですが、過去それをやって盛大に失敗したことがあるので初心者はあんまりしないほうがいいと思います。
- 例えばproductsテーブルを作る時
- テーブル名 → products(複数形)
- モデルのクラス名 → Product(先頭大文字の単数形)
- モデルファイル名 → product.rb(単数形)
モデル、テーブルを作る
$ rails g model モデルのクラス名
今回は↑を元に↓を実行
$ rails g model product
これでモデルの作成はOK。ちなみにcategoryみたいな最後がyの単語を複数形にする時は英語の授業で習った通りにcategoriesみたくします。 次はテーブルを作る。
上のコマンドをでモデルを作るとマイグレーションファイル(2018xxxxxxxxxx_create_products.rb) がdb/migrateディレクトリにできる。このマイグレファイルを編集して実行したらテーブル作成完了。
マイグレーションファイルの中身は、たぶんこうなってる。
class CreateProducts < ActiveRecord::Migration[5.0] def change create_table :products do |t| t.timestamps end end end
productsテーブルにname、detail、priceカラムを作るとする。 なので↑のファイルを下のように記述追加する。
class CreateProducts < ActiveRecord::Migration[5.0] def change create_table :products do |t| t.string :name, null:false t.text :detail t.integer :price t.timestamps end end end
カラムの型、名前、制約を追加してます。
カラムの型についてはこちら。
カラムの型 | 中身 | 主な用途 |
---|---|---|
string | 文字(比較的短め?) | 名前とかパスワードとか画像URL |
text | 文字(長め) | ブログ本文とか |
integer | 数字 | idとか何かの番号 |
datetime | 日付と時刻 | 使ったことない |
time | 時刻 | 使ったことない |
date | 日付 | 使ったことない |
boolean | 真偽値 | いつか使うと思う |
references | 外部キーの時 | 意外に使う |
他にもカラムの型はいくつかあるけど多分あんまり使わないと思う。実際使ってないやつもある。 私がよく使うと思うやつだけ今はとりあえず。
t.string :name, null:false
のnull:false
は空のままデータベースに保存できないということ。(not null制約)
外部キーとかnot nullとかはまとめて別記事でまとめます。
いよいよマイグレーションファイルの実行
$ rake db:migrate
これでもうテーブルとカラムができてます。
一応スキーマファイルで確認。 dbディレクトリにschema.rbってファイルがあるので中身を見てみる。
ActiveRecord::Schema.define(version: 2018xxxxxxxxxx) do create_table "products", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "name", null: false t.text "detail", limit: 65535 t.integer "price" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end
さっき編集したマイグレーションファイルがversionのとなりに書いてます。ちゃんと読み込んでくれてる。 マイグレーションファイルは消しちゃダメ。スキーマちゃんがパニクるから。
rake db:migrate
した後に消したくなったら、まずrake db:migrateを無かったことにして、さらにマイグレーションファイルすら
消したい時はちゃんとコマンドがそれをターミナルで打ち込む。
rake db:migrateを無かったことにする
$ rake db:rollback
マイグレーションファイルを消したい
今回は$ rails g model product
のコマンドでマイグレーションファイル を作ったのでこうします。
$ rails d model product
これでモデルごと無くなりました。
ただカラムを一つ削除とかそういうのだったら別途コマンドがある。 モデルの綴りを間違えたとか何もかも消したくなった時に私は消します。
この辺もカラムの追加、編集、削除をその内まとめます。