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);

こういうブログもありました。

人気のあるブログ:

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください