Перечисление родителей, потом детей - PullRequest
1 голос
/ 20 января 2012

У меня есть структура базы данных для категорий как 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 или другой цикл может быть?)

EDIT: Извините, что не ясно. Структура БД у меня такая:

CATEGORIES
   id, name, parent_id, user_id
ITEMS
   id, name, category_id

Я хочу показать такие категории:

Parent1
  Child1
  Child2
Parent2
  Child1

В настоящее время цикл перечисляет элементы на основе того, когда они были созданы, он не группирует их по parent_id, как я хотел бы

Ответы [ 2 ]

1 голос
/ 21 января 2012

Похоже, у вас должно быть:

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 %>
0 голосов
/ 20 января 2012

С parent_id, родителем категории BELONGS_TO и родителем has_many: категории

<% @parents.each do |parent| %>
  <h1><%= parent.name %></h1>
  <% parent.categories.each do |category| %>
    <!-- Your stuff here -->
  <% end %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...