Railsでモデル名を変えようと思ったらめんどくさかったので記録しときます。
環境はRails4だけど、多分3でも一緒かと。
条件
多対多の関係をもつ list モデルと user モデルをつなぐためのモデル名を list_users にしてたけど、リストの中に入ってるユーザー達のようにしか思えないので editability に変更する。
データーベースのテーブル名を変更
$ rails g migration RenameListUsersToEditability
と実行すると ${RAILS_APP}/db/20130911094949_rename_list_users_to_editability.rb というファイルが作成されるので
class RenameListUsersToEditability < ActiveRecord::Migration
def change
rename_table :list_users, :editabilities #この行を追加!
end
end
んで、 $ rake db:migrate
でデータベースに反映する。
モデル名の依存関係をチェック
Emacsで grep-find
かもしくはそれで出てくるコマンド $ find ${RAILS_APP}/app -type f -exec grep -inH -e list_user {} +
(-i でcase insensitive にしてる) で出てくる list_users を全部 editabilities に変更。
-i: 大文字小文字の違いを無視
-n: 行番号 も出力
-H: filename も出力
ファイル名を変更
${RAILS_APP}/app/models/list_user.rb
を editability.rb に名前を変更。
モデル名を変更
今変更したファイルの中に書かれてるActiveRecordのモデル名を変更。
class Editability < ActiveRecord::Base
belongs_to :list
belongs_to :user
end
ちょっと気をつけること
初め editablilities にしないといけない部分を editability にしてたためエラーが発生して少しはまる。
参考
How do you write a migration to rename an ActiveRecord model and its table in Rails? - Stack Overflow http://stackoverflow.com/questions/471416/how-do-you-write-a-migration-to-rename-an-activerecord-model-and-its-table-in-ra