よちよち.rb 第27回 #yochiyochirb

今回は「復習会」ということで、いつものようにチュートリアルをすすめるのではなく、
今までのところで気になっているところ、もう一度聞いておきたいところを復習する会でした!

いつもきれいなスマートニュースさんの素敵オフィスをお借りしました!

概要

自己紹介(何かあれば近況を一言)
復習

復習もグループワークが◎

事前にどのように進めていくかを特に決めていたわけではなかったのですが、
集まってみて「どうする〜?」となったときに、やっぱりグループごとに取り組むというのがいいかなとなり、
4人ずつくらいのグループごとに、復習をして、最後に共有タイムをもつというかたちになりました。
全部で15人いたので、やっぱり全体でなにかをすすめていくっていうのはちょっと難しくなっちゃいますね。
グループごとに活発な復習がおこなわれたようなので、よかったのではないでしょうか!

「rake db:migrate」って何してくれてるんだっけ

グループワークをすることになって、メンバーからひとつずつ疑問をあげてもらったんですが、
時間の制約があったのでそのなかで出来そうなこと、ということで、
マイグレーションって何だっけ、というところを復習することになりました。
(私の疑問でした。ありがとうございました!)

まず、マイグレーションファイルどこにあったっけ
$ db/migrate/

ここに、マイグレート( `rake db:migrate` )したときのタイムスタンプっぽい数字から始まるファイルがあります。

どうやって作られるのかしら

作ってみましょう!

$ rails generate migration test

すると、`db/migrate/20140714121828_test.rb` がつくられました。

この中身をみてると、まだ何もアクションが定義されていません。
そこでここを参考にしてアクションを定義しました。

1 class Test < ActiveRecord::Migration
2   def change
3     create_table(:horses) do |t|
4     t.column :content, :text
5     t.column :remind_at, :datetime
6     end
7   end
8 end

horsesというテーブル名で、text型のcontentというカラムと、datetime型のremind_atというカラムをつくる、ということですね。
アクションを定義して `rake db:migrate` すると、実行されます。

ほんとに出来たの?データベース

ここで便利コマンド!

$ sqlite3 db/development.sqlite3 ".schema"

ベータベースがSQLite3の場合ですが、これを実行すると現在あるテーブルが一覧できます。
こんな風に

CREATE TABLE "horses" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "conent" text, "remind_at" datetime);
...

ステータスも便利

$ rake db:migrate:status

Status のところの Up になっていればマイグレートされている、 Down になっていればマイグレートされていない、ということのようです。
たとえば、ロールバックするとステータスは Down になります。
あるいは、generateしたあとだけどまたマイグレートしていない場合は、Down になります。

(Railsチュートリアルで作成した、demo_appアプリで実行しています)

$ rake db:rollback  #直前の1テーブルが対象のようです。
$ rake db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20140219121302  Create users
   up     20140331114755  Create microposts
  down    20140714121828  Test

$ rails generate migration foo

      invoke  active_record
      create    db/migrate/20140719084856_foo.rb

$ rake db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20140219121302  Create users
   up     20140331114755  Create microposts
  down    20140714121828  Test
  down    20140719084856  Foo


どんなふうに動いているのか、わかってきました!

他のグループのIssueもおもしろいよ!

ミートアップ中、「rake db:migrate のタスクってどこにあるの?」という疑問があって、
トミーがまとめてくれました!!
https://github.com/yochiyochirb/meetups/issues/362

次回

次回は21日(月)が祝日なので、22日(火)です。
以前より課題になっていた、「その日の参加者が一覧できるといいね」のために、
いつもアップデートしている自己紹介ファイルを保存するリポジトリが変わりました。
みなさんご注意〜!