2
1

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.

NoMethodErrorを解決した話 (Railsチュートリアル )

Last updated at Posted at 2021-06-23

Qiita初投稿です。宜しくお願いします。
今回は、NoMethodErrorの解決にかなりの時間を費やしてしまったので、紹介していこうと思います。

エラー文

NoMethodError (undefined method `log_in' for ~~~~~)

原因

ApplicationコントローラにSessionヘルパーモジュールを読み込む際に、
helloメソッドに書き込んでしまっていたので、正常に動作していなかった。

正)

application_controller.rb

class ApplicationController < ActionController::Base
  include SessionsHelper
end

誤)

application_controller.rb

class ApplicationController < ActionController::Base

  def hello
    include SessionsHelper
  end
end

解決するまでの過程

エラーを見る限り、メソッドがないということなのでlog_inメソッドが定義されているかを確認した。

sessions_helper.rb
module SessionsHelper

  def log_in(user)
    session[:user_id] = user.id
  end
end

log_inメソッドは定義されていることを確認してから、よく分からなくなってしまい、詰まってしまった。その後は、そもそもメソッドとは何か?をRuby on Rails ガイドで調べることに。

Railsのコントローラは、ApplicationControllerを継承したRubyのクラスであり、他の>クラスと同様のメソッドが使えます。アプリケーションがブラウザからのリクエストを受け取ると、ル>ーティングによってコントローラとアクションが指名され、Railsはそれに応じてコントローラのイ>ンスタンスを生成し、アクション名と同じ名前のメソッドを実行します。

振り返りつつ、チュートリアルに沿ってもう一度確認していると、何故かSessionヘルパーモジュールがhelloメソッドの中にあるのに気がついた。

感想

エラーを出すと、どうしても視野が狭くなってしまい、普段気付けることに気付きにくくなってしまう。今回のことを生かして、次からは、少し離れたところから見るつもりで、冷静に対処していきたい。

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?