『Ruby on Rails5 アプリケーションプログラミング』学習日誌 6

前書き

今日も第5章モデルについて学習していきたいと思います。あと、ここに書いてあることは単なる学習記録なので事実とは関係がない場合があります。ご了承ください。

ページ範囲

p.291-311

学習ポイント

コールバックについて

あるモデル操作に対してそれに付随する処理はコールバックとして定義することで同じようなコードがモデルやコントローラに分散するのを防ぐことができる。

マイグレーションについて

テーブルレイアウトを作成・変更するためにマイグレーションという機能がある。この機能は開発の途中での構成の変化にも対応できる。マイグレーションファイルには必ず頭にタイムスタンプが振られる。rails側ではこの値を元にそれがすでに実行済みかどうかを判断している。railsではこのマイグレーションファイルをタイムスタンプによって一元的に管理しているため、テーブルの状態を特定の時点まで戻したりすることが可能。バージョンの管理ができるためとても便利。

マイグレーションファイルの作成について

ターミナルから下記のようにコマンドすることでマイグレーションファイルを自動的に作成することができる。

rails generate migration ChangePhoneOfStaffs

20180813110400_change_phone_of_staffsのようなマイグレーションファイルができる。20180813110400の部分がタイムスタンプ。ここではinteger型で定義してしまった電話番号フィールドをstring型に変更したいので下記のようにファイルの内容を変更する。

class ChangePhoneOfStaffs < ActiveRecord::Migration[5.2]
  def change
    change_column :staffs, :phone, :string
  end
end

そして

rails db:migrate

マイグレーションを実行すると実際にstaffsテーブルのphoneカラムのデータ型がstringになる。これはdb/schema.rb内の記述が書き換わっていることから確認できる。
また、コマンドで指定するファイル名について若干の命名規則があり、

Add〇〇Toテーブル名 〇〇:データ型


のようにすることで生成されるファイルの内容が下記のようになる。

class Add〇〇ToStaff < ActiveRecord::Migration[5.2]
  def change
    add_column :テーブル名, :〇〇, :カラム名
  end
end

感想

マイグレーションは単にテーブルを簡単に用意するためのものだと思っていたので仕組みを知ることができ良かった。自分で考えるテーブルの設計は基本間違っているのでどんどん便利に使えるようになりたい。