我有两个模型帖子和类别。我正试图在我的索引和展示视图中显示每个帖子的类别名称。我正在使用表连接。但问题是,在我的show视图中,类别正确显示,但它在索引视图中为nil:NilClass提供NoMethodError:undefined方法`name'。我无法弄清楚为什么它会在我的节目视图中显示,而不是在索引视图中显示。
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" %>
<%= 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 :(得分:10)
您的@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 %>