0
0

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.

【第5章】Railsチュートリアル(5.3.4 リンクのテスト)の演習でNoMethodErrorが出た時にやったこと

Posted at

Railsチュートリアル第5章(第6版)-5.3.4 リンクのテスト- の演習2に従ってtest環境でfull_titleヘルパーを使うようにすると、NoMethodErrorが発生した。
Railsチュートリアル第5章.png
どうやらfull_titleメソッドが見つからないようだ。

やったこと① NoMethodErrorについて調べた

まずはNoMethodErrorについて調べてみた。が、やはりそのまま**"SiteLayoutTest"でfull_titleメソッドが定義されていない**という意味のようだ。この時点で私が思っていたのは、"SiteLayoutTest"ではfull_titleメソッドを呼び出しているだけなので、そりゃあここでは定義していないでしょ。という事だった。これまでチュートリアルに沿って進めてきたので、full_titleメソッドを定義している側が正しいか調べてみよう。とはならなかった。

やったこと② full_titleメソッドについて調べた

次にfull_titleメソッドを調べてみた。すると下記記事が最初にヒットしたので一先ず開いた。
参考:デフォルト値付きの引数 Railsチュートリアルのfull_titleメソッドを例に
記事の内容は今回知りたい内容ではないが、Railsチュートリアル第4章のfull_titleについて書かれている。このおかげで**full_titleを第4章で定義していたのだと気づいた。**

やったこと③ full_titleを定義するファイルを修正した

第4章を見直してみると原因が分かった。full_titleを定義を誤って別のファイルにしていたのだ。
×誤って定義していた"static_pages_helper.rb"

module StaticPagesHelper
  # ページごとの完全なタイトルを返します。
  def full_title(page_title = '')
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      page_title + " | " + base_title
    end
  end
end

〇本来定義すべき"application_helper.rb"

module ApplicationHelper

end

今回は、本来定義しておくべきだが何も定義していないファイルをincludeしたことでエラーが発生していた。
"static_pages_helper.rb"のコードを"application_helper.rb"にコピペするとエラーは解消された。
Railsチュートリアル第5章(3).png

まとめ

やったこと①②③の流れで解決できた。
NoMethodError: undefined methodが発生した時は、メソッドを定義しているファイルも確認すること。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?