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 问题。
我有以下设置:
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 问题。