Rails Guides 5.8章でnilClassがでたので原因調査

RailsGuidesのチュートリアルを進めているのですが5.8章でエラーが出たので対処法をまとめておきます。

スポンサーリンク

undefined method `each’ for nil:NilClass

RailsGuidesのチュートリアルは簡単なブログを作りつつRailsを学ぼうというコンセプトで表記のとおり進めていくとサクッとRailsの開発の具合を学べるサイトです。

通常、チュートリアルの類は問題は起きないと思うのですが、タイポやなんやかんやでいらぬエラーをだしていると思わぬところでのエラーに出くわす可能性があります。今回はまさにそれでした。5.8章ではブログ中の記事一覧を表示するページを作成します。チュートリアル通りに実装して対象ページを表示しようとしたもののなんと「undefined method `each’ for nil:NilClass」がでた。

eachを使っているのはapp/views/articles/index.html.erbの以下の部分

<%@articles.each do |article| %>
 <tr>
  <td><%=article.title %></td>
  <td><%=article.text %></td>
 </tr>
<%end%>

原因

eachを用いて値を取り出しているモトはarticles_controllerのindexに定義した「@articles = Article.all」なのでたぶんこのなかに何かの拍子でnilがはいってしまったのだろう。

そんわけでコンソールから各レコードの値を確認してみる。

[vagrant@localhost blog]$ rails console
Loading development environment (Rails 5.1.4)
irb(main):001:0> Article.all
Article Load (8.1ms) SELECT "articles".* FROM "articles" LIMIT ? [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<Article id: 1, title: "Rails is awesome!", text: nil, created_at: "2018-07-08 08:07:10", updated_at: "2018-07-08 08:07:10">,
#<Article id: 2, title: "Rails is awesome!", text: nil, created_at: "2018-07-08 08:09:03", updated_at: "2018-07-08 08:09:03">,
#<Article id: 3, title: "Rails is awesome!", text: nil, created_at: "2018-07-08 08:13:08", updated_at: "2018-07-08 08:13:08">,
#<Article id: 4, title: "Rails is awesome!", text: nil, created_at: "2018-07-08 08:30:20", updated_at: "2018-07-08 08:30:20">,
#<Article id: 5, title: "Rails is awesome!", text: "It really is.", created_at: "2018-07-08 14:32:36", updated_at: "2018-07-08 14:32:36">,
#<Article id: 6, title: "Rails is awesome!", text: "It really is.", created_at: "2018-07-08 14:34:31", updated_at: "2018-07-08 14:34:31">]>

なんと多くのレコードのtextの値がnilになっていた。nilClassのエラーが出て当然の状況。

対処

ということでコンソールを抜けて(quit)DBレセット。

[vagrant@localhost blog]$ rails db:migrate:reset
Dropped database 'db/development.sqlite3'
Dropped database 'db/test.sqlite3'
Created database 'db/development.sqlite3'
Created database 'db/test.sqlite3'
== 20180708065357 CreateArticles: migrating ===================================
-- create_table(:articles)
   -> 0.0042s
== 20180708065357 CreateArticles: migrated (0.0043s) ==========================

そして改めていくつか記事を作成して一覧ページに行くと無事表示されました。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク