下面是我的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
答案 0 :(得分:5)
你这么说:
@brands = Brand.all
这意味着@brands
现在是一个数组,因为all
:
find(:all, *args)
的便利包装。
全部查找 - 这将返回所使用选项匹配的所有记录。如果未找到任何记录,则返回空数组。使用
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
做点什么。