---
title: "Relationer"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/154123-relationer"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "pirajan"
published: "2006-11-23T21:56:17.000Z"
updated: "2006-11-27T19:21:37.000Z"
replies: 2
views: 320
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/webbutveckling/154123-relationer"
---

# Relationer

## #1 — pirajan, 2006-11-23T21:56Z

Går rakt på sak;

Jag har två tabeller. categories och subcategories

categories:

```
id int
name varchar(45)
```

subcategories:

```
id int
name varchar(45)
parent_id int
```

 

Hur gör jag för att enklast visa dem hierarkiskt i en \<ul\>-lista enligt:

```
<ul>
  <li>Kategori1</li>
  <ul>
     <li>Underkategori till 1</li>
  </ul>
  <li>Kategori 2</li>
... osv
```

Har angett i subcategory-modellen att *belongs_to:category*, men vet inte riktigt hur jag går till väga efter det. 

Tacksam för hjälp.

Permalänk: https://www.webforum.nu/p/154123

## #2 — SebbeJ, 2006-11-24T13:12Z

Lägg till has_many :subcategories i din category-modell.
Sen i dina controllers måste du givetvis populera vissa instansvariabler med data från modellerna.

I viewen något i stil med:

```
<ul>
<% @categories.each do  |category| %>
<li><%= category.name %></li>
<% if (category.subcategories.length > 0) %>
<ul>
<% category.subcategories.each do |subcategory| %>
<li><%= subcategory.name %></li>
<% end %>
</ul>
<% end %>
<% end %>
</ul>
```

Jag är själv nybörjare på rails så förlita dig inte allt för mycket på ovanstående kod.

Ett annat sätt att lösa kategori/underkategori-biten är att köra det i samma tabell och köra acts_as_tree på din kategorimodell.

Permalänk: https://www.webforum.nu/p/1901614

## #3 — pirajan, 2006-11-27T19:21Z

i viewen:

```
<%= display_tree_recursive(@tree, 0) { |node| node.name } %>
```

andra parametern (0) anger vilket id "root"-kategorin har.

i helpern:

```
def display_tree_recursive(tree, parent_id)
    ret = "\n<ul>"
    tree.each do |node|
      if node.parent_id == parent_id
        ret += "\n\t<li>"
        ret += yield link_to node.name, node
        ret += display_tree_recursive(tree, node.id) { |n| yield n } unless node.children.empty?
        ret += "\t</li>\n"
      end
    end
    ret += "</ul>\n"
  end
```

i controllern:

```
@tree = Topic.find(:all, :include => [ :children ])
```

 

i modellen: 

```
acts_as_tree :parent_id
```

Permalänk: https://www.webforum.nu/p/1902398

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/154123-relationer
