我在尝试正确连接表数据并将其呈现到视图中时遇到问题。我目前正在设计一个系统,所以我的餐厅客户可以创建动态菜单并在菜单页面上正确显示它们。目前我有一个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>
&LT; --------------------------------------------- ------------ 修改 ------------------------------ ----------------------------------&GT;
我现在有以下代码正常工作。这为我提供了仅属于特定菜单的部分和相应的菜单项。我唯一需要帮助的是如果没有菜单在该部分中有项目,代码仍会输出一个空部分。有什么指导吗?
<% @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 %>
&LT; --------------------------------------------- ------------ 编辑2 ----------------------------- -----------------------------------&GT;
我能够导出我需要的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;