Ruby Rails nil:NilClass 的未定义方法“标题”

Ruby on Rails undefined method `title' for nil:NilClass

我有以下设置:

Product.rb

class Product < ActiveRecord::Base
  belongs_to :category
end

Category.rb

class Category < ActiveRecord::Base
  belongs_to :category
  has_many :categories
  has_many :products
end

categories_controller.rb

def show
end

private
  def set_category
    @category = Category.find(params[:id])
  end

  def category_params
    params.require(:category).permit(:title, :category_id)
  end

products_controller.rb

def product_params
   params.require(:product).permit(:title, :price, :text, :category_id, :avatar)
end

分类展示

<% @category.products.each do |p| %>

   <article class="content-block">
      <h3><%= @p.title %></h3>
   </article>

<% end %>

而这个returns标题中的错误。我在这里做错了什么?

应该是:

<h3><%= p.title %></h3> # as, your block variable is p, not @p

没有

<h3><%= @p.title %></h3>

还有一个建议,你可以把你的set_category方法写成:

def set_category
  @category = Category.includes(:products).find(params[:id])
end

它将使用 Eager Loading Associations 技术解决 N + 1 问题。