10
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Deviseのエラーを突破する 〜NoMethodError in Devise

Last updated at Posted at 2019-12-28

何度かDeviseを使用しているもののまだまだ初心者。基本的なことなのかもしれませんが、初心者のわたしは解決法さがしに手間どってしまいました…。同じエラーで検索していらした方の解決の糸口になれば幸いです。

環境

  • Ruby 2.5.1
  • Rails 5.2.3
  • (Gem)Devise 4.7.0

エラー内容

ユーザーログアウトを行おうとしたところNoMethodError in Devise::SessionsController#destroyという表示。
user_logout.png
上記のように、わたしの場合はログアウト機能(SessionsController#destroy)を実行した際に発覚したエラーですが、同様のエラーにも対応できるかもしれません。

これまでDeviseの機能を使ってきてこのような表示に遭遇したことがなかった分、Devise導入と同時に作成したカラムそのものに問題があるのでは、となかなか見当をつけることができませんでした。

なぜエラーになったのか?

エラーに表記されているremember_created_atという名称のカラムがusersテーブルに含まれていなかったことが原因でした。

解決法

ここからは通常の手順で該当のカラムを追加していきましょう。わたしの場合はremember_created_atがない、と怒られているようなので、これをusersテーブルに追加するためのマイグレーションファイルを作成します。まずは、ターミナルで以下を打ち込みます。

$ rails g migration AddRemember_created_atToUsers

そして、作成されたマイグレーションファイルにadd_column〜以下を追加します。

2019xxxxxxxx_add_remember_created_at_to_users.rb
class AddRememberCreatedAtToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :remember_created_at, :datetime
  end
end

追加しなくてはならないカラムの型が何に該当するのかさえわからなかったため、Devise導入時usersテーブルを作成した際のマイグレーションファイル(この時点ではコメントアウトになっていた!)を参考に:datetimeであることを確認して入力。

あとは、テーブルに反映させるだけです。忘れずにターミナルで以下を実行します。

$ rake db:migrate

こうして無事ログアウトができるようになりました! 作成したカラムがnilで怒られる場合は、適当な値を入力したうえで動作確認をしてみると良いと思います。
手順としてはかんたんですが、なかなか見当がつかず、ずっとアカウント切り替えられなかったらどうしよう、とすら思いました。良かったです。

参考

上記を参考に解決することができました。ありがとうございます。

10
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?