我有一个类别为id, name, parent_id
的数据库结构。
用户可以输入类别,如果没有父类,则parent_id
字段将设置为0.
我的观点是这里显示的一个基本循环:
<% @categories.each do |category| %>
<tr class="<%= cycle('one', 'two') %>">
<td>
<%= indent(depth(category.id)) %>
<%= best_in_place category, :name %>
<%= link_to(image_tag('/images/delete.png', :class => 'delete'), "categories/delete/#{category.id}")%>
</td>
</tr>
<% end %>
indent(depth(category.id))
函数只是获取子类别深度的一种方法,并为了视觉目的添加了许多类别。 http://d.pr/Ss8e
我的问题是孩子们并没有被列在他们各自的父母身边。我不知道怎么回事,有什么建议吗? (group_by或其他循环可能?)
修改 对不起,不清楚。我拥有的数据库结构是这样的:
CATEGORIES
id, name, parent_id, user_id
ITEMS
id, name, category_id
我希望显示如下类别:
Parent1
Child1
Child2
Parent2
Child1
目前,循环会根据项目的创建时间列出项目,而不会按照我喜欢的内容对其进行分组。
答案 0 :(得分:1)
看来你应该:
category.rb
class Category < ActiveRecord::Base
scope :parents, lambda {where("parent_ID IS NOT NULL")}
scope: for_parent, lambda{|parent| where(:parent_id => parent.id)}
def children
Category.for_parent(self)
end
end
然后在你的控制器中:
@categories = Category.parents.all
在你看来
<% @categories.each do |category| %>
<tr>
<td><%= category.name %></td>
</tr>
<% category.children.each do |child| %>
<tr>
<td><%= child.name %></td>
</tr>
<% end %>
<% end %>
答案 1 :(得分:0)
使用parent_id,类别BELONGS_TO父级和父级has_many:categories
<% @parents.each do |parent| %>
<h1><%= parent.name %></h1>
<% parent.categories.each do |category| %>
<!-- Your stuff here -->
<% end %>
<% end %>