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