学習[58]日目
本日の学習内容
ログイン機能の実装
deviseの基本的にな利用方法に関して
- gemのインストール
- Eroorの修正
gemのインストール
#Gemfile
gem 'devise'
#ターミナル
bundle install
#deviseに関する関連ファイルの生成
rails g devise:install
#usersモデルの生成
rails g devise user
上記のような手順で準備を行なっていくのですが、今回はrails g devise:installを忘れて、rails g devise userを実行したことにより、Errorが生じてしまいました。
Eroorの修正
思わぬところでエラーが発生したので、エラー解決までにやったことをメモしていきます。
'method_missing': undefined method 'devise' for User (call 'User.connection' to establish a connection):Class (NoMethodError)
確か上記のようなエラーが生じてしまったので、以下のことを実行することで元に戻すことができました。
#ターミナル上で下記を実行
#既存のファイルに関して追記したものを現在のgitに保存されている状態に更新を行う
git checkout .
#新規に作成されたファイルに関して現在のgitに保存されている状態に更新を行う
(新規ファイルの削除)
git clean -df .
しかし、上記だけでは改善されない点をあり、データベース等に保存されたテーブルに関しては、削除されなかったので、sqlコマンドかsequel pronにて削除を行う必要があった。
ちなみに今回の原因を一つ一つ削除していくとなると下記を削除することで元に戻りました。
●routes.rbのdevise_for :usersという記述を削除
●rake db:rollbackでmigration-fileのrollbackを行う
●uses-tableとそれを作ったときのmigration-fileを削除
●rails d model userを行いuser-modelを削除
deviseのビューファイルの追加
上記の過程でログイン画面は出来るのですが、このままだと簡素な見た目のままなのでここではログイン画面に任意のビューを反映させるための操作を行います。
#devise関連ビューの生成
rails g devise:views
今回はビューファイルに関してはhamlを使用しているので生成されたファイルの拡張子はerbであり、残ったままだとerbの優先度の方が高いのでhamlを適用させるためにはerbファイルを削除する必要があります。
#app/assets/stylesheets/application.scssにてビューを反映させるように実装
@import "module/user";
#application_controller.rbにて未ログイン時にログインページに遷移させる
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
end
ここまで暫定で実装を行いましたが、結果的にdeviseに関しての前提知識が不足していることが分かったので明日はそこらへんを含めて理解して実装していきたいと思います。
参照:https://qiita.com/tani-shi/items/3419600447292abf6c79
:https://qiita.com/ryouzi/items/9c5324ba567109ab2a22