人生で初めて買った新品のMacBookでプログラマーを目指す記録

26歳の夏、新品のMacBookProを手に入れました。そいつと一緒にプログラマーを目指します。

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:falsenull: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

これでモデルごと無くなりました。

ただカラムを一つ削除とかそういうのだったら別途コマンドがある。 モデルの綴りを間違えたとか何もかも消したくなった時に私は消します。

この辺もカラムの追加、編集、削除をその内まとめます。