何度かDeviseを使用しているもののまだまだ初心者。基本的なことなのかもしれませんが、初心者のわたしは解決法さがしに手間どってしまいました…。同じエラーで検索していらした方の解決の糸口になれば幸いです。
環境
- Ruby 2.5.1
- Rails 5.2.3
- (Gem)Devise 4.7.0
エラー内容
ユーザーログアウトを行おうとしたところNoMethodError in Devise::SessionsController#destroy
という表示。
上記のように、わたしの場合はログアウト機能(SessionsController#destroy)を実行した際に発覚したエラーですが、同様のエラーにも対応できるかもしれません。
これまでDeviseの機能を使ってきてこのような表示に遭遇したことがなかった分、Devise導入と同時に作成したカラムそのものに問題があるのでは、となかなか見当をつけることができませんでした。
なぜエラーになったのか?
エラーに表記されているremember_created_at
という名称のカラムがusersテーブルに含まれていなかったことが原因でした。
解決法
ここからは通常の手順で該当のカラムを追加していきましょう。わたしの場合はremember_created_at
がない、と怒られているようなので、これをusersテーブルに追加するためのマイグレーションファイルを作成します。まずは、ターミナルで以下を打ち込みます。
$ rails g migration AddRemember_created_atToUsers
そして、作成されたマイグレーションファイルにadd_column〜
以下を追加します。
class AddRememberCreatedAtToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :remember_created_at, :datetime
end
end
追加しなくてはならないカラムの型が何に該当するのかさえわからなかったため、Devise導入時usersテーブルを作成した際のマイグレーションファイル(この時点ではコメントアウトになっていた!)を参考に:datetime
であることを確認して入力。
あとは、テーブルに反映させるだけです。忘れずにターミナルで以下を実行します。
$ rake db:migrate
こうして無事ログアウトができるようになりました! 作成したカラムがnilで怒られる場合は、適当な値を入力したうえで動作確認をしてみると良いと思います。
手順としてはかんたんですが、なかなか見当がつかず、ずっとアカウント切り替えられなかったらどうしよう、とすら思いました。良かったです。
参考
- teratail 「[Ruby on Rails : NoMethodError in Devise::RegistrationsController#create]
(https://teratail.com/questions/87061)」 - ISSUS 「Deviseのログインを維持する設定」
上記を参考に解決することができました。ありがとうございます。