Rails4

Railsでモデル名を変更する

More than 1 year has passed since last update.

Railsでモデル名を変えようと思ったらめんどくさかったので記録しときます。

環境はRails4だけど、多分3でも一緒かと。

条件

多対多の関係をもつ list モデルと user モデルをつなぐためのモデル名を list_users にしてたけど、リストの中に入ってるユーザー達のようにしか思えないので editability に変更する。

データーベースのテーブル名を変更

$ rails g migration RenameListUsersToEditability

と実行すると ${RAILS_APP}/db/20130911094949_rename_list_users_to_editability.rb というファイルが作成されるので

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のモデル名を変更。

${RAILS_APP}/app/models/editability.rb
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