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)