10
11

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 5 years have passed since last update.

undefined method `name' for nil:NilClassの原因と解決策

Last updated at Posted at 2019-02-26

##エラー

2行目のpost.user.nameの「name」のメソッドが見当たらない

post.index
ActionView::Template::Error (undefined method `name' for nil:NilClass):
    1: <% @posts.each do |post| %>
    2:       <P><%= link_to(post.user.name, "/users/#{post.user.id}") %></p>
    3:       <p><%= link_to(post.content, "/posts/#{post.id}") %></p>
    4:   <% end %>

##原因:postテーブル内の何かしらのレコードがなかった

考えられる原因は2つ

(1)postはpost.controller.rbに定義されていない
(2)データベースのpostモデルに、あるべきレコードがない

前者は、コントローラーで定義されていたので、後者の方に原因があると見立てた。

##解決策:DBの全てのレコードを空にした

rake db:reset

全てのテーブルを dropして、"db/schema.rb" を元にテーブルを再作成する。(参考記事:http://o.inchiki.jp/obbr/183)

##メモ
DBの全てのレコードを空にした後、改めて、post.createしたら無事にpost.indexに反映された。

今回のエラーの原因は、
データベースのレコードと、ユーザー登録されているユーザーのレコードがミスマッチしていたこととだと思った。開発途中で、DBのusersモデルにカラムを追加したり、消去していたことで、ズレが生じていたかも。

10
11
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
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?