記事の目的
railsのgemであるdevise
はユーザー登録機能を実現するために使用されている最もポピュラーなライブラリの一つかと思いますが、
アプリケーションを作成する上で複数モデルログインをしたいと考える場合もあるかと思います。
(よく見るのは管理者と一般ユーザーを切り分けるタイプのものですかね。)
今回はdeviseを活用した複数モデルログインを実現した後、他のモデルをどのように紐付けていくのかをまとめました。
本論
複数モデルログイン
この記事は複数モデルログインの機能自体は実現した前提での内容となります。
複数モデルログイン機能の構築には、勝手に引用してしまい恐縮ですが、良記事がございますので下記ご参考いただければ。
http://freecamp.life/rails-devise-admin1/
筆者のケース
私は現在日本にいる外国人が日本でチューターを探すためのマッチングアプリのようなものを作っています。
そのため「外国人」と「チューター」としての会員登録、ログイン機能をつけています。
なのでコントローラーの構成は
app
|- controller
|- foreigner #(外国人)
|- tutor #(チューター)
となっており、ルーティングは
devise_for :foreigners, skip: :all
devise_scope :foreigner do
get 'foreigners/sign_in' => 'foreigners/sessions#new', as: 'new_foreigner_session'
post 'foreigners/sign_in' => 'foreigners/sessions#create', as: 'foreigner_session'
delete 'foreigners/sign_out' => 'foreigners/sessions#destroy', as: 'destroy_foreigner_session'
get 'foreigners/sign_up' => 'foreigners/registrations#new', as: 'new_foreigner_registration'
post 'foreigners' => 'foreigners/registrations#create', as: 'foreigner_registration'
get 'foreigners/password/new' => 'foreigners/passwords#new', as: 'new_foreigner_password'
end
devise_for :tutors, skip: :all
devise_scope :tutor do
get 'tutors/sign_in' => 'tutors/sessions#new', as: 'new_tutor_session'
post 'tutors/sign_in' => 'tutors/sessions#create', as: 'tutor_session'
delete 'tutors/sign_out' => 'tutors/sessions#destroy', as: 'destroy_tutor_session'
get 'tutors/sign_up' => 'tutors/registrations#new', as: 'new_tutor_registration'
post 'tutors' => 'tutors/registrations#create', as: 'tutor_registration'
get 'tutors/password/new' => 'tutors/passwords#new', as: 'new_tutor_password'
end
となっております。
別のモデルの追加
ここからは別のモデルを追加する方法について説明していきます。
今回は、外国人登録したユーザーが、チューターとのマッチング希望を出すためのモデルを作成していきます。
モデル作成
ここではneed
モデルというものを作成します。
モデルの作成は特段代わりはなく、
rails g model need
でOKです。
その後のマイグレーションファイルやモデルファイルのバリデーション/アソシエーション等の設定も普通通り行っていきます。
コントローラー作成
さてここからが本題です。
今回はforeigner
に紐づくモデルだったので、コントローラーはforeignerコントローラーフォルダの中に作成していきます。
下記の通りコマンドを打ち込んでください。
rails g controller foreigners/needs
するとapp/controller/foreigners
の下にneeds_controller.rb
が作成されるかと思います。
ファイルの中身はこんな感じで作成されるはずです。Foreignersの中のNeedsControllerという内容になっていますね。
class Foreigners::NeedsController < ApplicationController
(略)
end
ルーティング
続いてルーティングです。
ルーティングに関してはforeignerの名前空間の中で設定していきたいので、
(略)
namespace :foreigners do
resources :needs
end
を追記します。
こうすることでdeviseを活用した複数モデルログイン機能と、それに紐づいたモデルの設定が完了です。
あとはアクションなりviewの設定をよしなにやっていけばOKです!
※viewもapp/views/foreigners
の下にneeds
ディレクトリが生成されているので、そこにファイルを作成していきましょう。
ご指摘等ございましたらコメント頂けると幸いです!!!