Rails:uninitialized constant model-name:ModelとDBを上書きしたい時のメモ

Published on:
Last updated:

This post is also available in: 日本語 (Japanese)

Railsを利用していて、既に user というModelとDBテーブルを作っている状態でうっかり rails generate model user とかしてしまうと以下のようなエラーが出ます。
私の場合、既にuserというModelとDBでアプリを制作し始めていて、その後に gem 'devise' を導入して、userのModelとDBを上書きする必要に迫られた時のメモです。

rails uninitialized constant model-name

以下の記事内容の別の方法として、既存のマイグレーションファイル(例えば、_create_users.rb ファイル)を削除した後、新たな rails generate model user(Deviceの場合は、rails generate devise user)でマイグレーションファイルを作成し、マイグレーションファイルのタイムスタンプを書き換えて、rake db:migrate するという方法もあります。
チーム開発には適してませんが。

1.drop_tableのマイグレーションファイルを生成

ひとまず、以下のDBとModelを削除することから始めます。
既存のマイグレーションファイル(例えば、_create_users.rb ファイル)を削除したり、rake db:rollback でなんとかならないかな...とか思っていたら意味不明になります。

rails generate migration drop_table_users
rails delete model users

drop_table_users のマイグレーションファイルは以下のようなコードになります。

class DropTableUsers < ActiveRecord::Migration
  def change
    drop_table :users
  end
end

2.新しいModelとDBを作成する

例えば以下のようなコマンドで、新しいuserモデルとマイグレーションファイルを生成します。

rails generate model User name:string

3.rakeコマンドでDBをリセットする

マイグレーションファイルの修正の仕方によって多少代わりますが、rakeコマンドでDBをリセットします。

rake db:migrate:reset

About
Kuniyoshi Takemoto is the founder of Amelt.net LLC, and editor of this blog(www.amelt.net).Learn more and follow me on LinkedIn.