Ruby on Railsでブログ作成(6) - マイグレーションファイル作成

プログラミング、サーバー、ネットワーク、IT用語、ハマったときのトラブルシューティングなど様々なIT関連の話題をひたすら書いていく技術ブログです。

2017年2月21日火曜日

Ruby on Railsでブログ作成(6) - マイグレーションファイル作成


ここから本格的にブログを作成していきます。まずはMVCのM(モデル)から作成していきます。データベースにテーブルを作成しますが、ここではRailsのデフォルトデータベースのsqliteを使用します。mysqlやpostgresqlを使っても構いません。


articlesテーブルを作成する

articlesテーブルはブログのタイトルと記事の内容を持ちます。イメージは以下の通りです。

id title description
1 titleです。 descriptionです。
2 title2です。 description2です。

そしてテーブルとそのテーブルに対応するモデルを作成する時はいくつか注意があります。

・モデルのクラス名は単数系で頭文字が大文字です(Article)
・モデルのファイル名は単数系の全て小文字です(article.rb)
・データベースのテーブル名は複数形のモデル名です(articles)
・モデル(Article.rb)に対するContorllerはモデル名の複数形に_controller.rbをつけます(articles_controller.rb)

上記はどのモデル/テーブルを作成しても同じルールです。では、さっそくRailsでテーブルを作成する時にしようするマイグレーションファイル(migration file)を作成しましょう。コマンドラインでrails generate migration create_articlesとすると下記のようにマイグレーションファイルが作成されます。


下記のようにカラムを追加してみましょう。


基本構文は下記の通りです。
t.データ型 :カラム名(+ カラムのオプション)

他にも説明したいことがあるので、ここではtitleのみを追加します。またidはRailsが自動で作成するので追加する必要はありません。titleを追加したらrake db:migrateを実行しましょう。これはマイグレーションファイルに従ってデータベースにテーブルを作成してくれるコマンドです。rake db:migrateのみだとマイグレーションファイルが複数あったときに、同時に全てのマイグレーションファイルを実行してしまいますが、rake db:migrate VERSION=xxxxx(xxxxは各マイグレーションファイルの先頭についている日時の数字全て)とすると特定のマイグレーションファイルだけを実行できたりします。

rake db:migrateを実行すると、下記のような結果が表示されると思います。これでidとtitleのカラムを持ったarticlesテーブルが完成しました。migrateディレクトリと同じ階層にあるschema.rbにarticlesテーブルが追加されたことを確認しましょう。


articlesテーブルの修正

ここでdescriptionを追加し忘れたとしましょう。descriptionを追加する方法はいくつかあります。rake db:rollbackをすると直前に行ったrake db:migrateが取り消されます。実行するとschema.rbからarticlesテーブルが削除されていることが確認できます。ここでマイグレーションファイルに下記のようにdescriptionを追加してrake db:migrateを実行することにより、id、title、descriptionを持ったarticlesテーブルが完成します。これが一つ目の方法です。



もう一つ方法があり、こちらを基本的にはこちらの方法を使うことをおすすめします。説明をする前にrollbackをしてdescriptionをマイグレーションファイルから削除して、再度titleのみでmigrateしましょう。schema.rbにtitleのみある状態です。

もう一つの方法とは、aritlcesテーブルを修正するために、新しいマイグレーションファイルを作成することです。作成手順は先程と同じでrails generate migration add_description_to_articlesとします。するとchangeメソッドを持った新たなマイグレーションファイルが出来上がります。

changeメソッドの中を下記のようにしてください。



ここで、updated_atとcreated_atって何って思ったかもしれません。これはRailsの形式的なカラムで、それぞれアップデートされた時間とそのレコードが作成された時間が記録されます。今回これをadd_columnで追加しましたが、t.timestampsとcreate_articlesのマイグレーションファイルに追加すれば、t.timestampsのみで2つのカラムが作成されます。

上記のように追加したらrake db:migrateをしましょう。Railsはどのマイグレーションファイルを実行したかschema_migrationsというテーブルに持っています。ですので、rake db:migrateをするとまだ実行されていないファイルのみ処理されていきます。実際に実行してみるとadd_description_to_articlesのみ実行されるはずです。schema.rbを確認してカラムが追加されていることを確認しましょう。これでarticlesテーブルの修正ができました。

次回はモデルArticle.rbを作成するところから始めます。

◯「Ruby on Railsでブログ作成(7) - モデルの作成」の記事はこちら
◯「Ruby on Railsでブログ作成」シリーズの記事一覧はこちら
◯ Ruby on Railsのマイグレーションファイル関連の記事はこちら



最近の投稿