Rails 3 - 嵌套资源的索引视图

时间:2010-11-23 17:53:05

标签: ruby-on-rails ruby many-to-many nested

我在两个模型(订单和产品)之间存在多对多的关系。有一个名为Lines的连接表,以便用户可以向他们要订购的产品添加数量。

我的产品嵌套在订单中,所以我的路线如下所示:

  resources :orders do
    resources :products, :controller => "products"    
  end
end

如果我的index.html.erb只是占位符,我就能成功转到索引(订单/ ID /产品),但是在尝试显示数据时我遇到了问题。

错误输出的我的产品表(在<%@ products.each ...行上)如下所示:

<table>
  <tr>
    <th>URL</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @products.each do |product| %>
  <tr>
    <td><%= product.url %></td>
    <td><%= link_to 'Show', product %></td>
    <td><%= link_to 'Edit', edit_order_products_path(product) %></td>
    <td><%= link_to 'Destroy', order, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>

我的索引方法如下所示:

  def index
    @order = Order.find(params[:order_id])
    @products = Product.all    


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

该错误表明我的@products对象为零;但是,在控制台Product.all中返回4个项目。

我是newb,这是我第一次引用嵌套资源,是否有可能我只是试图使用实例变量@products错误地调用它?

由于

1 个答案:

答案 0 :(得分:3)

1)您的数据库中是否有任何产品?最好检查您是否有任何使用:@products.present?

<% if @products.present? %>
  <% @products.each do |product| %>
   <tr>
    <td><%= product.url %></td>
    <td><%= link_to 'Show', product %></td>
    <td><%= link_to 'Edit', edit_order_products_path(product) %></td>
    <td><%= link_to 'Destroy', order, :confirm => 'Are you sure?', :method => :delete %></td>
   </tr>
 <% end %>
<% else %>
 <tr>
   <td colspan=4>You don't have any products yet.</td>
 </tr>
<% end %>

2)我想您只想显示此订单中的产品。如果你这样做,那么你应该写:

@products = @order.products

而不是

@products = Product.all