Rails 3.1: Как я могу остановить отображение в представлении массива вместе с данными для 2 связанных моделей? - PullRequest
2 голосов
/ 23 декабря 2011

Это сводит меня с ума. Я сделал много поисков Google и StackOverflow, но не могу найти решение. У меня есть 2 модели: FoodMenu и Product. FoodMenu has_many: продукты и продукт принадлежит В таблице продуктов есть столбец "food_menu_id", и я также сделал add_index: products,: food_menu_id.

Я хочу создать представление, в котором перечислены все FoodMenus и их продукты. В папке views у меня есть папка страниц, которая содержит «menus.html.erb». В pages.controller.rb у меня есть:

def menus
@food_menus = FoodMenu.includes(:products).all
end

В menus.html.erb у меня есть:

<%= @food_menus.each do |food_menu| %>
  <%= food_menu.name %>
    <ul>
       <%= food_menu.products.each do |product| %>
         <li><%= product.name %></li>
       <% end %>
   </ul>
<% end %>

Возвращает ожидаемые данные, за исключением того, что после каждого набора продуктов он также отображает полный массив продуктов, а затем в конце отображает полный массив FoodMenus. Почему он это делает и как я могу это исправить?

Под полным массивом я имею в виду следующее: [#FoodMenu id: 1, имя: "Бутерброды", описание: "прямо с прессы", create_at: "2011-12-21 20:39:42", updated_at: "2011-12-21 20:39:42 ">, #FoodMenu id: 2, имя:" Пицца ", описание:" свежее местное тесто ", create_at:" 2011-12-21 20:40:03 ", updated_at:" 2011-12-21 20:40: 03" >]

1 Ответ

4 голосов
/ 23 декабря 2011

each должен выглядеть следующим образом:

<% food_menu.products.each do |product| %>

each возвращает перечисление, к которому он был вызван ("массив", хотя это не массив real ).

<%= %> отображает значение внутри него.В этом случае массив выглядит - возвращаемое значение each.

...