2009-07-23 7 views
1

darstellt ich einen Bemerkungsfeld in meiner app haben wollen, die wie folgt aussieht:Gibt es native Unterstützung in Rails oder Ruby für Gewinde Kommentare

response1 
response1a 
response1b 
    response1b1 
response2 
response2a 
response2b 
response2c 
    response2c1 
    response2c1a 
    response2c1a1 
    response2c1a1 
     response2c1a1a 
     response2c1a1a1 

Ich tue dies Unter der Annahme, durch Verwendung von HTML wie folgt zusammen:

<div class="comment"> 
    Response1 
    <div class="comment"> 
    Response1a 
    <div class="comment"> 
     Response1a1 
    </div> 
    </div> 
    <div class="comment"> 
    Response1b 
    </div> 
</div> 

Und das CSS:

.comment { margin-left: 50px; } 

Es bleibt noch die Frage der Datenstruktur in Rails zu verwenden, um repräsentieren die Kommentare und ihre Beziehungen zueinander. Gibt es in Ruby eine native Unterstützung für die Darstellung einer Baumdatenstruktur, die für diese Datenstruktur gut funktioniert? Oder müsste ich etwas für diese Aufgabe maßgeschneidert bauen?

Antwort

4

Sie könnten eines der verschachtelten Set-Plugins verwenden - awesome_nested_set scheint am aktivsten zu sein. Mit diesen Optionen können Sie einen vollständigen Satz (einschließlich aller Nachkommen) mit einem einzigen Aufruf der Datenbank auswählen.

+0

Ich habe es bearbeitet, um den Link zu reparieren - nicht sicher, warum es überhaupt nicht funktioniert hat. –

2
class Post < ActiveRecord::Base 
    belongs_to :parent, :class_name => 'Post' 
end 

Migration:

create_table :posts do |t| 
    t.string :body 
    t.integer :parent_id 
end 
3

Vielleicht möchten Sie acts_as_tree für so etwas sehen in.

+0

awesome_nested_set überlegen ist. Alles beginnt mit einem [gutes Schema für hierarchische Daten] (http://dev.mysql.com/tech-resources/articles/hierarchical-data.html). –

1

Ich musste solche Dinge in Rails implementieren. Es ist nicht zu schwierig. Joe's Vorschlag deckt das ziemlich genau ab. Ihr Fall ist besonders einfach, weil Sie sich nicht darum kümmern müssen, Zweige Ihres Baumes zu bewegen. Sobald eine Antwort zu der Baumstruktur der Antworten hinzugefügt wurde, bleibt sie dort, wo sie ist, oder wird (möglicherweise) gelöscht.

Ich würde sagen, für eine Situation wie diese wäre die Implementierung selbst praktischer als die Verwendung eines Edelsteins oder Plugins.