Device
ログイン機能やユーザー登録機能をとても簡単に実装することができるgem。
参考にした記事
https://qiita.com/Orangina1050/items/a16e655519a60f35b394
下準備
コントローラーの作成 ついでにアクションとビューを作成する
$ docker-compose run web bin/rails g controller comments index
導入編
Gemfileに、deviseを追加する。
$ docker-compose run web bundle install #deviseをインストールする
$ docker-compose build #構築する。
終わったら、 deviseの設定ファイルを作成する
$ docker-compose run web bin/rails g devise:install
ログイン機能用のモデル作成を行い(1)、を行いマイグレーション(2)
その後、ログイン機能に必要なビューファイルをまとめて作成(3)
$ 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を編集し、下記を加える
<div class="field">
<%= f.label :name %> <br />
<%= f.text_field :name %>
</div>
ちなみに、私はここで、
NoMethodError in Devise::Sessions#new
エラーが発生した。
一度、コンテナを止めて(1)、削除し(2)、再度コンテナを構築したら(3)、解決した。
(理由をわかっていないので宿題ですね)
$ docker ps -a
$ docker stop (コンテナ名) #・・・(1)
$ docker rm (コンテナ名) #・・・(2)
$ docker-compose build #・・・(3)
新規登録時に名前を入力できるようにする
usersテーブルにnameカラムをstring型で追加するマイグレーションファイルを作成
$ 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に記述する
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) # 新規登録時(sign_up時)にnameというキーのパラメーターを追加で許可する
end