Devise をインストールしましたが、生成したすべてのファイルを含めて削除します。それ、どうやったら出来るの?
私は今日同じ問題を解決することを考えていますが、これは答えられていないので、それに行く=)
モデル
Deviseは、デフォルトでインストールされている場合、User
モデルを生成します。 devise
の下の行を削除します。これは私のように見えます。
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible
では、email
、:password
、password_confirmation
、remember_me
が不要になった場合は削除できます。
ビュー
デフォルトのDeviseインストールでは、app
フォルダーにビューは生成されません。 Deviseのオーバーライドビューを生成した場合は、Rails destroy devise:views
(Rails 3)を実行してそれらを削除できます。
通常、すべてのビューはapp/views/devise
に格納されます。
コントローラ
デフォルトでは、Deviseはコントローラーも生成しません。オーバーライドを行った場合、それらはおそらくregistrations_controller
として知られています。プロジェクトでDevise::RegistrationsController
クラスを継承するコントローラーを検索します。
また、Deviseのwikiをたどって、リダイレクトメソッドなどを追加した場合は、after_sign_in_path_for
、store_location
など、ユーザーをリダイレクトするためのメソッドを探してください。
マイグレーション
ジェネレータを介してDeviseをインストールした場合は、マイグレーションcreate_users
を探してください。不要になった場合は、移行でdrop_table :users
を使用して削除してください。
ほとんどの人は自分のユーザーモデルを維持したいと思うでしょう。 Devise <2.0を使用している場合、移行はヘルパーによって行われます。 Gemfile
からDeviseを削除すると、Railsは以下のヘルパーを理解できなくなり、たとえば、これらの移行を別のボックスで再実行しようとすると、エラーがスローされます。これらはヘルパーは:
t.database_authenticatable
t.recoverable
t.rememberable
t.trackable
t.encryptable
t.confirmable
t.lockable
t.token_authenticatable # => becomes t.string :authentication_token
正確な列については、以下はDeviseによって生成された列への参照です。
https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style
上記のガイドは、ヘルパーを使用してDeviseによって生成されたフィールドの一覧です。リストとモデルを確認して(コンソールでUser
を呼び出すなど)、これらの列を削除する移行を生成できるはずです。
しかし...
一貫性を保つために、上記のガイドを使用して移行をヘルパーを使用しないように変換し、移行を生成してそれらを削除する必要があるのは少し残念です。これは、移行履歴の一貫性を保つためです。それ以外の場合は、移行を実行している誰もが存在しないヘルパーを呼び出そうとする可能性があります。また、フィールドを削除する移行では、フィールドが存在することも期待されます。
または、移行を抑制して、スキーマの最新状態をschema.rb
/structure.sql
に依存させるのもよいタイミングかもしれません。マイグレーションを削除した後でも、rake db:schema:load
を使用すると、いつでも開発DBをいつでも再作成できます。
初期化子とロケール
devise.rb
のconfig/initializers
とdevise.en.yml
のconfig/locales
を削除します。
ルート
devise_for
行をすべて削除します。これらは、gemの削除後にエラーを発生させます。
宝石ファイル
ヤイ。すべてのドーム、gemfileから行gem 'devise'
を削除します。
ジェネレーターを使用して構成ファイルも削除し(ステップ2)、プロセス全体は次のようになります(以前の回答を参照)。
rake db:rollback VERSION=<insert the version number of the migration>
Rails destroy devise:install
Rails destroy devise User
( 'User'をモデルの名前に置き換えます)私の場合、ユーザーと管理者という2つのモデルがあり、Deviseを使い続けていますが、ActiveAdminで名前の衝突の問題があり、管理者モデルを削除する必要があります。しかし、考案中のAdminへの参照が非常に多かったため、以下の手順を実行する必要がありました。しかし、それは上記の元の質問にも答えると思います。これを行う正しい方法は次のとおりです。
1.ユーザーモデルのdeviseマイグレーションを見つけてロールバックします[重要:Deviseに関連付けられているユーザーテーブルを削除したくない場合は、このステップをスキップしてください]:
rake db:rollback VERSION=<insert the version number of the migration>
例:rake db:rollback VERSION:20110430031806
2.このコマンドを実行して、Deviseと関連ファイルを削除します。 Rails destroy devise Admin
(Adminがユーザーアカウントを持つモデルの名前の場合)。
これにより、次の出力が生成されます。
invoke active_record
remove db/migrate/20110430031806_devise_create_admins.rb
remove app/models/admin.rb
invoke test_unit
remove test/unit/admin_test.rb
remove test/fixtures/admins.yml
route devise_for :admins
3. Deviseを完全に削除するには、モデル、コントローラー、およびビューでDeviseへのすべての参照を削除する必要があります。これは手作業です。上記の答えはこの残骸を見つけるための良い詳細を提供しますが、私の目的には不完全でした。これが他の誰かの役に立つことを願っています。
デーモンシーの返事はとても役立つとわかりました。これを行う際に考慮すべき他のいくつかの事項を次に示します。
デバイスの置き換え
テスト
これは私のために働いた!
1:
Rails d devise User
これにより、モデルとルートが削除されます。2:
Rails d devise:install
、これによりdevise.rb
およびdevise.en.yml
ファイル。3:マイグレーションを作成します。例:
Rails g migration drop_user_table
。drop_table :users , force: :cascade
、force: :cascade
;の世話をしますPG :: DependentObjectsStillExist:エラー:
他のテーブルがユーザーテーブルに依存している場合に発生します。