1. ホーム
  2. ruby-on-rails

[解決済み] NoMethodError nil:NilClass の未定義メソッド `name' です。

2022-02-27 07:27:38

質問

postとcategoryの2つのモデルを持っています。投稿のインデックスと表示ビューの両方で、各投稿のカテゴリ名を表示しようとしています。テーブル結合を使用しています。しかし、問題は、showビューではカテゴリが適切に表示されているのに、インデックスビューではNoMethodError: undefined method `name' for nil:NilClass が表示されることです。なぜショー・ビューでは表示され、インデックス・ビューでは表示されないのかが分かりません。

index.html.erb

<% @posts.each do |post| %>
  <h2><%= link_to post.title, post %></h2>
  <p>বিভাগঃ <%= post.category.name %></p>
  <p><%= post.body %></p>
  <%= link_to 'দেখুন', post, class: "button tiny" %>&nbsp;
  <%= link_to 'সম্পাদনা', edit_post_path(post), class: "button tiny" %>
<% end %>

show.html.erb

<h2><%= link_to @post.title, @post %></h2>
<h5>বিভাগঃ <%= @post.category.name %></h5>
<p><%= @post.body %></p>

post.rb

class Post < ActiveRecord::Base
  validates_presence_of :title, :body, :category
  has_many :comments
  belongs_to :category
end

category.rb

class Category < ActiveRecord::Base
  has_many :posts
end

解決方法は?

あなたの @posts インスタンス変数には Post は、何らかの理由で親である Category . を避けることができます。 NilClass エラーは、それぞれの Post には、関連する Category をクリックすると、カテゴリ名が表示されます。

<%= post.category.name if post.category %>

または が存在するので Post に関連付けられていない Category をチェックする条件式でブロック全体を囲むとよいでしょう。 Category :

<% @posts.each do |post| %>
  <% if post.category %> # Check for parent category
    # Remaining code
  <% end %>
<% end %>