21:00概要Railsのユーザ認証にDeviseを使っているという人は多いと思います。私もDeviseを利用しているのですが、ログインの処理を少し変更したいなど、カスタマイズをしようとするとかなり面倒です。今回は、Deviseのルーティングやカスタマイズをする際に関係する「スコープ」について調べたことをまとめていきます。4.4スコープについて例えば、RailsでUserというDeviseでユーザ管理をするモデルがあったとします。このような場合、ユーザがログインしているかどうかは、user_signed_in?で確認します。このuserの部分がスコープの部分です。スコープがあるのかというと、Deviseで複数のモデルを扱うことができるようにするためです。ここでは、Userというモデルを用意しましたが、さらに管理者ユーザを管理するAdminUserというモデルを用意したとします。このような場合には、管理者ユーザがログインしているのかどうかは、admin_user_signd_in?で確認します。ユーザがログインしているかどうかを例にしましたが、そのほかのパスの生成メソッドの名前にもスコープが使われています。そのため、Userモデルの登録をするためのパスを生成するのはnew_user_registration_path、AdminUserモデルの登録をするためのパスを生成するのは、new_admin_user_registration_pathとなります。このスコープについて理解していないと、他のDeviseの使い方を説明した記事を参考にしてモデル名だけを変えた際に、うまくできないとなってしまいます。ルーティングこのスコープについて知ってからroutes.rbを見てみましょう。:admin_usersdevise_forでは、devise内のコントローラで処理をする際に、スコープを設定するという処理をしています。usersのようにして、UserモデルためのDeviseのコントローラを継承したコントローラを作成し、新たにアクションを追加した場合は次のようにして、スコープを経由するようにする必要があります。'users/registrations#other_show'endここでは、idを指定して他のユーザの情報を見ることができるように、other_showアクションを追加し、そのアクションへのパスを記述しています。:userのようにして追加しています。これで、users/:idへのアクセス時には、userというスコープがコントローラに渡されて処理されます。まとめDeviseでスコープは重要な考え方です。実際に、devise_scopeを使わないでルーティングを追加しようとしたら、エラーが発生してうまくいきません。Deviseを使うということは、簡単にユーザ認証などを行うことができますが、カスタマイズをしようとする際にDeviseのことを知らなくてはいけないということです。この事を念頭に入れてDeviseを使っていきましょう。