LoginSignup
0
0

More than 3 years have passed since last update.

deviseを使った複数モデルログイン実現後の他のモデルの扱い

Last updated at Posted at 2021-04-25

記事の目的

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ディレクトリが生成されているので、そこにファイルを作成していきましょう。

ご指摘等ございましたらコメント頂けると幸いです!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0