has_many和belongs_to nameerror rails

时间:2013-09-10 17:47:32

标签: ruby-on-rails ruby-on-rails-3

这是我的index_controller

  def index
    @category = Category.all
  end

我的类别模型包含

has_many :sub_categories

我的sub_category模型包含

belongs_to :category

这是我的观点

<% category.sub_categories.each do |f| %>
    <li>f.name</li>
<% end %>

我正在使用rails 4并且收到错误

undefined local variable or method `category' for #<#<Class:0xab758cc>:0xb56c46d8>

3 个答案:

答案 0 :(得分:3)

您只需稍微了解一下命名约定以及它提示您编写的代码类型:

def index
  @categories = Category.all
end

@category应为@categories,因为Category.all将返回0,1或多个Category对象的ActiveRecord关系,而不是单个对象。

然后:

<% @categories.each do |category| %>
  <% category.sub_categories.each do |sub_category| %>
    <li><%= sub_category.name %></li>
  <% end %>
<% end >

首先,您从Category.all迭代类别,然后对每个类别迭代其子类别。

答案 1 :(得分:1)

你有两个问题。

  • 应该是@category,而不是category
  • 应为<li><%= f.name %></li>

答案 2 :(得分:0)

您错过了对实例变量和ERB标记的引用以使用f.name,它应该是

<% @category.sub_categories.each do |f| %>
  <li><%= f.name %></li>
<% end %>