SinatraのDBに後からカラムを追加、ついでに型も修正
この前の続きになります。
SinatraとActiveRecord,SQLite,Haml等を使ってWebアプリの雛形を作ってみた
今日はSinatraで作っていたテーブルにカラムを追加してみようと思います。
元のテーブル comments
カラム名 | 型 |
---|---|
id | INTEGER |
body | text |
created_at | datetime |
updated_at | datetime |
このテーブルにuser_idというカラムを追加したいと思います。
$ bundle exec rake db:create_migration NAME=comments_add_user_id VERSION=002
実行したらdb/migrate/002_comments_add_user_id.rbというファイルが作成されます。
このファイルにadd_column(テーブル名, カラム名, 型)で追加・編集します。
(この時はまだ気づかなかったのですが、user_idの型をtextで作ってしまっていました。後からintegerに変更します。)
$ emacs db/migrate/002_comments_add_user_id.rb
class CommentsAddUserId < ActiveRecord::Migration[5.0]
def change
+ add_column(:comments, :user_id, :text)
end
end
設定を反映します。
$ bundle exec rake db:migrate
最新のテーブル comments
カラム名 | 型 |
---|---|
id | INTEGER |
body | text |
created_at | datetime |
updated_at | datetime |
user_id | text |
型の変更
ボ〜としていて後から気づいたのですが、user_idをtext型で作ってしまっていました。
これは後々大変そうなので、Integer型に修正しておきます。
$ bundle exec rake db:create_migration NAME=comments_change_column_to_integer VERSION=003
作成されたファイルにchange_column(テーブル名, カラム名, 型)で編集します。
$ emacs db/migrate/003_comments_change_column_to_integer.rb
class CommentsChangeColumnToInteger < ActiveRecord::Migration[5.0]
def change
+ change_column(:comments, :user_id, :integer)
end
end
再度、設定を反映します。
$ bundle exec rake db:migrate
スキーマで確認
sqlite> .schema
CREATE TABLE "comments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "body" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "user_id" integer);