プログラミングの学習を始めてはや1ヶ月半の人間です。
個人開発でBtoCのマッチングアプリを作ろうと思い、とりあえずまずはBとCの登録をしなければいけないことに気付き、初心者ながら色々調べつつポチポチと実装しましたので、アウトプットとして記事を残したいと思います。
ここではuserとcompanyでそれぞれの別個の管理テーブルをそれぞれ生成し実装します。
1.deviseの導入
まずはGemfileにdeviseを記し bundle install します。
そしてそのままターミナルでdeviseをインストールします。
% rails g devise:install
2. /config/initializers/devise.rb に手を加える
色々なコードがありますがその中の恐らく247行目?(自分は247行目でした)辺りのコメウントアウトされている、
config.scoped_views = false となっている記述を変更します。コメントアウトも下記のように外します。
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
config.scoped_views = true
3. devise関連のmodelを生成
今回はuserとcompanyのmodelを生成します。
% rails g devise user
% rails g devise company
4. 生成した各modelに関連するcontrollerを生成
% rails g devise:controllers users
% rails g devise:controllers companies
5. 関連するviewを生成
% rails g devise:views users
% rails g devise:views companies
6. routingの設定
これで無事にuserとcompanyの二つをdeviseによる管理ができるようになりました。
次にルーティングを追記します。
devise_for :companies, controllers: {
sessions: 'companies/sessions',
passwords: 'companies/passwords',
registrations: 'companies/registrations'
}
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
これでOKです。
7. 使わないviewの削除
これまでの手順の過程でもう使わないビューファイルが生成されてしまっているため削除します。
% rails d devise:views
以上で実装自体は完了しましたが、新規登録時のストロングパラメータ等の記述についてよくわからなかったため、自分流で調べ成功した例を元に説明します。
8. ストロングパラメータを設定する
今までdeviseのモデルが1つの時は追加したカラムがある場合、 application_controller.rb に以下のように設定していました。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
end
しかし今回は二つのモデルがあるため、設定の仕方が分からず、appliction_controllerではなくdeviseで生成した各モデルに関連するそれぞれのcontrollerで設定することにしました。
基本的には該当箇所のコメントアウトを外して許可するキーの配列に任意のカラムを追加していくだけで良いかと思います。
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :email, :password, :phone_number, :detail])
end
end
class Companies::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:company_name, :email, :password, :phone_number, :office_url])
end
end
以上で完了です。これであとはそれぞれのビューファイルで値を登録すれば無事にデータも保存され、ログイン、ログアウト等の機能も実装できるようになりました。
フォームのviewはuserとcompany二つ用意しなければならないことに注意してください。まあそこは部分テンプレートでどうにでもなりますね。
最後に
読んでいただいた方、ありがとうございました。
Qiita初投稿のうえ、マークダウン記法等もまだ詳しく理解していないため、少し読みづらい点があったかもしれません。
指摘コメント等ありましたら、よろしくお願いいたします。
次回以降の改善に活用させていただきます。