docker-composeでDeviseを導入


Device
ログイン機能やユーザー登録機能をとても簡単に実装することができるgem。

参考にした記事
https://qiita.com/Orangina1050/items/a16e655519a60f35b394

下準備
コントローラーの作成 ついでにアクションとビューを作成する

terminal
$ docker-compose run web bin/rails g controller comments index 

導入編
Gemfileに、deviseを追加する。

terminal
$ docker-compose run web bundle install #deviseをインストールする
$ docker-compose build #構築する。

終わったら、 deviseの設定ファイルを作成する

terminal
$ docker-compose run web bin/rails g devise:install

ログイン機能用のモデル作成を行い(1)、を行いマイグレーション(2)
その後、ログイン機能に必要なビューファイルをまとめて作成(3)

terminal
$ docker-compose run web bin/rails g devise user #・・・(1)
$ docker-compose run web rake db:migrate #・・・(2)
$ docker-compose run web bin/rails g devise:views  #・・・(3)

views/comments/index.html.erbを編集し、下記を加える

index.html.erb
  <div class="field">
    <%= f.label :name %> <br />
    <%= f.text_field :name %>
  </div>

ちなみに、私はここで、
NoMethodError in Devise::Sessions#new
エラーが発生した。

一度、コンテナを止めて(1)、削除し(2)、再度コンテナを構築したら(3)、解決した。
(理由をわかっていないので宿題ですね)

terminal
$ docker ps -a
$ docker stop (コンテナ名) #・・・(1)
$ docker rm (コンテナ名) #・・・(2)
$ docker-compose build #・・・(3)

新規登録時に名前を入力できるようにする
usersテーブルにnameカラムをstring型で追加するマイグレーションファイルを作成

terminal
$ docker-compose run web bin/rails g migration AddNameToUsers name:string $ rake db:migrate

ここでもまた、エラーが発生する場合は、再起動すると直る場合あり!

DBに名前を格納できるように変更する
deviseは初期の状態では、strong parameterが新規登録時のメールアドレスとパスワードのみ受け取るように設定されている。
しかし、deviseのstrong parameterはgem内のため、いじることができない。
なので、deviseが提供しているconfigure_permitted_parametersメソッドを利用する

configure_permitterd_parametersとは・・・

deviseのstrong parameterを追加することができるメソッド
application_controllerに記述する

controllers/application_controller.erb

  before_action :configure_permitted_parameters, if: :devise_controller?
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) # 新規登録時(sign_up時)にnameというキーのパラメーターを追加で許可する
  end