2009-07-23 2 views
1

Я хочу иметь раздел комментариев в моем приложении, которое выглядит следующим образом:Есть встроенную поддержка в Rails или Ruby, для представления резьбовых комментариев

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

Предполагая, что я могу сделать это с помощью HTML, таких как:

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

И это CSS:

.comment { margin-left: 50px; } 

Там по-прежнему остается вопрос о структуре данных для использования в Rails для представляют комментарии и их отношения друг к другу. Есть ли встроенная поддержка Ruby для представления структуры данных дерева, которая бы хорошо работала для этой структуры данных? Или мне нужно создать что-то настроенное для этой задачи?

ответ

4

Вы можете использовать один из вложенных плагинов - awesome_nested_set, по-видимому, наиболее активно поддерживается. Они позволяют выбрать полный набор (включая всех потомков) с одним вызовом в базу данных.

+0

Я отредактировал его, чтобы исправить ссылку - не знаю, почему это не сработало в первую очередь. –

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

миграция:

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

Вы можете посмотреть, чтобы acts_as_tree что-то вроде этого.

+0

awesome_nested_set превосходит. Все начинается с [хорошей схемы для иерархических данных] (http://dev.mysql.com/tech-resources/articles/hierarchical-data.html). –

1

Мне пришлось реализовать такие вещи в Rails. Это не слишком сложно. Предложение Джо почти полностью покрывает его. Ваш случай особенно прост, потому что вам не нужно беспокоиться о перемещении ветвей вашего дерева. Когда ответ добавляется в дерево ответов, он остается там, где он или (возможно) удаляется.

Я бы сказал, что для такой ситуации реализация этого будет более практичной, чем использование драгоценного камня или плагина.

2

Вы можете попробовать использовать acts_as_commentable_with_threading плагин - он использует идеи Ryan Bates (см RailsCast о полиморфных ассоциаций) и awesome_nested_set

+0

Приятно, что это определенно выглядит лучше! –

 Смежные вопросы

  • Нет связанных вопросов^_^