2015-05-31 131 views
1

我有以下设置:Ruby on Rails的未定义的方法'标题”的零: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 %> 

这将返回错误的称号。我在这里做错了什么?

回答

4

它应该是:

<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 

这将解决使用N + 1问题渴望加载协会技术。

相关问题