2014-01-13 9 views
2

두 가지 모델 및 카테고리가 있습니다. 게시물의 내 ​​색인 및 쇼보기에서 각 게시물의 카테고리 이름을 표시하려고합니다. 테이블 조인을 사용하고 있습니다. 하지만 문제는 내 쇼보기에서 범주가 제대로 표시되지만 NoMethodError : 인덱스보기의 nil : NilClass에 대해 정의되지 않은 메서드 인 'name'이 제공됩니다. 내 쇼보기에는 표시되지만 색인보기에는 표시되지 않는 이유를 알 수 없습니다.NoMethodError 정의되지 않은 메소드 '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 
+0

하나의 게시물에 category_id가 설정되지 않았습니다. – usha

+0

그게 다야. 감사합니다 – Shuvro

답변

10

@posts 인스턴스 변수에는 어떤 이유로 든 부모 Category과 연결되지 않은 Post의 인스턴스가 포함되어 있습니다. 당신은 각 Post는 관련 Category 범주의 이름을 인쇄하기 전에이 있는지 여부를 확인하여 NilClass 오류를 방지 할 수 있습니다

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

하는 Category과 관련되지 않은 Post의 존재는 아마도 바람직하지 않다 때문에, Category을 확인하는 조건으로 전체 블록을 감쌀 수 있습니다.

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

감사합니다. 방금 테이블을 편집하고 카테고리 ID가 누락 된 게시물을 발견하고 문제가 사라졌습니다. – Shuvro

관련 문제