web-dev-qa-db-ja.com

RailsでDeviseを使用するときに「ユーザー」コントローラが必要ですか?

私はRails初心者です。スキルを向上させるために小さなRails4プロジェクトに取り組んでいます。大まかにフォローしています M.Hartlのチュートリアル

チュートリアルに従って、カスタムユーザー認証が構築されます。ただし、ユーザー認証にはDeviseを使用したいと思います。チュートリアルのように、ユーザーコントローラーが必要ですか?すでにDeviseを使用している場合、Usersコントローラーを使用する/使用しないのはどの場合ですか?

チュートリアルに関しては、コントローラー生成パーツをスキップするだけですか、それともアクションをDeviseにマップする必要がありますか?

19
imarg

通常のサインアップ/更新プロセスとは別にユーザーを管理する場合にのみ、ユーザーコントローラーが必要です。管理者が通常のデバイスのサインアップ/更新プロセスとは関係なくユーザーを管理(作成、編集、更新、削除)できるように、ユーザーコントローラーがあります。

Deviseとの競合は、おそらく、ルートファイルにdeviseを設定するための_devise_for :users …_があり、UsersController用に_resources :users_があるためです。これは、deviseとUsersControllerが同じ_/users_ルートのいくつかを共有しようとすることを意味します。それらの1つがマップされているパスを変更して、それらを分離する必要があります。たとえば、_:path => 'u'_ステートメントに_devise_for_を追加して、デバイスルートが_/u_にマップされ、_/users_のUsersControllerと競合しないようにすることができます。または、_devise_for_をそのままにして(したがって、まだ_/users_を使用)、代わりにUsersControllerのルーティングを_resources :users_admin, :controller => 'users'_に変更して、UsersControllersルートを_/users_admin_。これにより、パスヘルパーがたとえば_users_path_から_users_admin_path_に変更されることに注意してください。

[〜#〜]更新[〜#〜]

コメント/編集に続いて、チュートリアルをざっと見てきました。deviseは基本的に、セクション5.4からセクション9.1または9.2までに開発されたユーザー関連機能と同等の機能を提供すると思います。 (プラス電子メールの確認、パスワードのリセット、アカウントのロックアウトなどのいくつかの余分なもの)。ただし、Deviseをそのチュートリアルとマージしようとする場合、それがその機能のドロップイン置換であることを意味するわけではありません。動作するように見えるものがいくつかありますが(たとえば、Deviseは_current_user_メソッドも定義します)、ルートなどは異なり、deviseは物事をより多くのコントローラー(登録用の個別のコントローラー、サインイン/パスワードのリセット…)。 adminタイプの機能(セクション2.2、9.3、9.4のような-作成/編集/削除/リストotherユーザー)は、私が追加したものです。アプリで別のUsersControllerを使用します。 DeviseはUsersControllerを定義していませんが、上記のようにパスなしで_devise_for :users_を実行すると、usersルートを使用します。

したがって、より具体的には:

  1. すべてのユーザーを表示、編集、削除できる管理者タイプの機能を有効にする場合にのみ、UsersControllerが必要になります。
  2. チュートリアルでdeviseを使用したい場合は、サイズに合わせてマッサージしたり、ページのヘルパーリンクを変更したりするために、おそらくいくつかの作業が必要になります。申し訳ありませんが、具体的ではありません。そのチュートリアルはまだ行っていません。

自分ですべてを手動で行うことで得られる余分な理解を逃すことになりますが、deviseは人気のあるエンジンなので、知っておくとよいでしょう。時間があれば、チュートリアルを完全に実行してから、もう一度工夫してください。これは、デバイスの背後で行われていることを理解するのに役立ちます。追伸:すべてをすぐに理解していなくても、デバイスのソースコードを確認することは有益な場合があります。

42
Tim