【问题标题】:NoMethodError undefined method `name' for nil:NilClassNoMethodError 未定义方法“名称”为 nil:NilClass
【发布时间】:2014-01-13 21:12:52
【问题描述】:

我有两个模特帖子和类别。我正在尝试在我的索引和显示帖子视图中显示每个帖子的类别名称。我正在使用表连接。但问题是虽然在我的显示视图中类别显示正确,但它在索引视图中给出了 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    您的@posts 实例变量包含Post 的实例,无论出于何种原因,它们都没有与父Category 关联。您可以通过在打印类别名称之前检查每个Post 是否有关联的Category 来避免NilClass 错误:

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

    或者,由于与Category 不相关的Post 的存在可能是不可取的,您可能希望将整个块包装在一个检查@ 的条件中987654330@:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 2015-12-20
      • 2013-04-25
      • 2021-06-24
      • 2013-11-14
      • 2013-01-14
      • 2017-10-02
      相关资源
      最近更新 更多