未定义的方法

时间:2011-08-06 02:20:46

标签: ruby-on-rails-3

下面是我的index.html.erb(我只想显示品牌及相关子品牌列表)

<h1>Brands</h1>

<% @brands.each do |brand| %>
<h2><%= brand.name %></h2>
<% end %>

<% @brands.subbrands.each do |subbrand| %>
<h2><%= subbrand.name %></h2>
<% end %>

查看index.html时收到的错误是:

undefined method `subbrands' for #<Array:0x9e408b4>

这是我的brands_controller:

class BrandsController < ApplicationController

def index
  @brands = Brand.all

  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @brands }
  end
 end

end

这是我的routes.rb

Arbitrary::Application.routes.draw do

resources :brands do
  resources :subbrands 
  end

resources :subbrands do
   resources :subsubbrands
  end

这是我的brand.rb模型

class Brand < ActiveRecord::Base
    validates :name, :presence => true

    has_many :subbrands
    has_many :subsubbrands, :through => :subrands
end

...和我的subbrand.rb模型

class Subbrand < ActiveRecord::Base
    validates :name, :presence => true

    belongs_to :brand
    has_many :subsubbrands
end

1 个答案:

答案 0 :(得分:5)

你这么说:

@brands = Brand.all

这意味着@brands现在是一个数组,因为all

  

find(:all, *args)的便利包装。

find(:all)

  

全部查找 - 这将返回所使用选项匹配的所有记录。如果未找到任何记录,则返回空数组。使用Model.find(:all, *args)或其快捷方式Model.all(*args)

然后你有这个:

<% @brands.subbrands.each do |subbrand| %>

这就产生了这个错误:

undefined method `subbrands' for #<Array:0x9e408b4>

因为@brands是一个数组,而数组不知道subbrands的含义。这样的事情可能会更好:

<% @brands.each do |brand| %>
    <% brand.subbrands.each do |subbrand| %>
        <h2><%= subbrand.name %></h2>
    <% end %>
<% end %>

但你可能也希望用brand做点什么。