Rails 3.2 ActiveRecord Запросы с несколькими объединениями - PullRequest
1 голос
/ 09 марта 2012

У меня проблема с попыткой правильно объединить данные таблицы и отобразить их в виде. В настоящее время я разрабатываю систему, чтобы клиенты моего ресторана могли создавать динамические меню и правильно отображать их на странице меню. В настоящее время у меня есть модели 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| %>
        &nbsp;&nbsp;&nbsp;<%= 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| %>
      &nbsp;&nbsp;&nbsp;<%= 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;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...