Rails 3 - индексный просмотр по вложенным ресурсам - PullRequest
4 голосов
/ 23 ноября 2010

У меня есть много ко многим отношениям между двумя моделями, Заказом и Продуктом.Существует объединяющая таблица под названием Линии, чтобы пользователи могли добавлять количества к продуктам, которые они хотели бы заказать.

У меня есть продукты, вложенные в заказы, поэтому мои маршруты выглядят следующим образом:

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

Я могу успешно перейти к индексу (orders / id / products), если мой index.html.erb является просто заполнителем, однако при попытке отобразить данные у меня возникают проблемы.

MyТаблица с ошибками (в строке <% @ products.each ...) выглядит следующим образом: </p>

<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 равен nil;однако в консоли Product.all возвращает 4 элемента.

Я новичок, и я впервые ссылаюсь на вложенные ресурсы, возможно, я просто пытаюсь вызвать его неправильно, используя переменную экземпляра @продукты?

Спасибо

1 Ответ

3 голосов
/ 23 ноября 2010

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
...