2014-01-13 51 views
2

我有兩個模型帖子和類別。我試圖在我的索引和展示視圖中顯示每篇文章的類別名稱。我正在使用表連接。但問題是,雖然在我的節目視圖中該類別正確顯示,但它在索引視圖中爲nil:NilClass提供了一個NoMethodError:undefined方法「name」。我無法弄清楚它爲什麼顯示在我的show view中,但不在索引視圖中。NoMethodError未定義的方法`name'爲零: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實例變量包含Post的實例,該實例無論出於何種原因都未與父級Category關聯。您可以通過檢查每個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

相關問題