У меня проблема с попыткой правильно объединить данные таблицы и отобразить их в виде. В настоящее время я разрабатываю систему, чтобы клиенты моего ресторана могли создавать динамические меню и правильно отображать их на странице меню. В настоящее время у меня есть модели Menu, MenuItem и Section. Я успешно создал формы, в которых я могу назначить menu_items для меню и связать menu_item с разделом. Моя проблема - рендеринг интерфейсного меню. Я хочу, чтобы мое меню было похоже на следующий шаблон. Любая помощь будет принята с благодарностью.
Menu Name
First Section
Menu Item
Menu Item
...
2nd Section
Menu Item
Menu Item
...
Мои модели и ассоциации перечислены следующим образом.
в Menu.rb
class Menu < ActiveRecord::Base
has_many :menu_menu_items, :dependent => :delete_all
has_many :menu_items, :through => :menu_menu_items
в MenuItem.rb
class MenuItem < ActiveRecord::Base
has_many :menu_menu_items
has_many :menus, :through => :menu_menu_items
belongs_to :sections
в Section.rb
class Section < ActiveRecord::Base
has_many :menu_items, :dependent => :nullify
Пока, на мой взгляд, у меня есть следующее. Здесь мне действительно не хватает понимания того, как работают Rails и ActiveRecord, поэтому я могу правильно создать это представление. Также мне нужно знать одну вещь: если в разделе нет элементов menu_items для определенного меню, как мне его исключить?
<div class="content">
<% @menus.each do |menu| %>
<h3><%= menu.name %> <br/></h3>
<% Section.all.each do |section| %>
<b><%= section.name %><br/></b>
<% menu.menu_items.each do |menu_items| %>
<%= menu_items.name %> <br/>
<% end %>
<% end %>
<% end %>
</div>
<---------------------------------------------- ----------- <strong>Редактировать -------------------------------- -------------------------------->
Теперь у меня работает следующий код. Это дает мне разделы и соответствующие пункты меню, которые принадлежат только конкретному меню. Единственная вещь, которая мне нужна, - это то, что код по-прежнему выводит пустой раздел, если в этом разделе нет меню. Любое руководство?
<% @menus.each do |menu| %>
<h3><%= menu.name %> <br/></h3>
<% Section.all.each do |section| %>
<b><%= section.name %><br/></b>
<% menu.menu_items.where(:section_id => section.id).each do |menu_items| %>
<%= menu_items.name %> <br/>
<% end %>
<% end %>
<% end %>
<---------------------------------------------- ----------- <strong>Редактировать 2 ------------------------------- --------------------------------->
Мне удалось вывести SQL, который мне был нужен, чтобы вытащить разделы, принадлежащие определенному меню. Как мне это реализовать?
select count(sections.id),sections.name
from menu_items
join menu_menu_items on menu_items.id=menu_menu_items.menu_item_id
join menus on menus.id=menu_menu_items.menu_id
join sections on menu_items.section_id= sections.id
where menu_id=16 #for example.
group by sections.id;