めもめも のーと

ハマったこととか、覚えたこととか

RailsでDBのカラムをリネームする方法

直接MySQLコマンドで直してもよかったんですが、今回は勉強のためmigrationで実施しました。

やり方


user_id を from_user_id に変更します。

  • 実行前
mysql> desc message_boards;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id      | int(11)      | YES  |     | NULL    |                |
| title        | varchar(255) | YES  |     | NULL    |                |
| body         | text         | YES  |     | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
| deleted_at   | datetime     | YES  |     | NULL    |                |
| lock_version | int(11)      | YES  |     | 0       |                |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

マイグレーションファイル生成。 ここではrename_user_id_to_message_boardsにしましたが、なんでもよさそうです。 from_user_id : integer も不要でした。。

$ rails g migration rename_user_id_to_message_boards from_user_id:integer

作られたファイルを確認。中身は空なので、追記します。

class RenameUserIdToMessageBoards < ActiveRecord::Migration
  def up
  end

  def down
  end
end

↓追記

class RenameUserIdToMessageBoards < ActiveRecord::Migration
  def up
    rename_column :message_boards, :user_id, :from_user_id
  end

  def down
    rename_column :message_boards, :from_user_id, :user_id
  end
end

マイグレーション実行。

$ rake db:migrate
==  RenameUserIdToMessageBoards: migrating ====================================
-- rename_column(:message_boards, :user_id, :from_user_id)
   -> 0.0553s
==  RenameUserIdToMessageBoards: migrated (0.0554s) ===========================

確認。確かに変わってました!

mysql> desc message_boards;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| from_user_id | int(11)      | YES  |     | NULL    |                |
| title        | varchar(255) | YES  |     | NULL    |                |
| body         | text         | YES  |     | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
| deleted_at   | datetime     | YES  |     | NULL    |                |
| lock_version | int(11)      | YES  |     | 0       |                |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)