我还是想知道,如果有人已经建成了螺纹评论系统(因为缺乏一个更好的词)在Rails的,如果我需要建立它自己。

在情况下,目前还不清楚,有什么我指的是像reddit的的评论系统,使它们看起来就像一棵树的树枝,可以自动缩进的答复(最好有投票就像reddit的一样)。

如果有人可以点我的代码,不会这一点,将不胜感激。

或者也许有一个开源项目,其包括此功能。

到目前为止,我一直没能找到一个在轨道上。

此外,会是更好的,如果这样问这个在Rails的论坛,是哪一个? (我是新的Rails)的

有帮助吗?

解决方案

使用 acts_as_tree 插件应该使这个非常容易实现。使用安装它

ruby script/plugin install acts_as_tree

app/models/comment.rb

class Comment < ActiveRecord::Base
  acts_as_tree :order => 'created_at'
end

db/migrate/20090121025349_create_comments.rb

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      t.references :parent
      t.string :title
      t.text :content
      ...
      t.timestamps
    end
  end

  def self.down
    drop_table :comments
  end
end

app/views/comments/_comment.html.erb

<div id="comment_<%= comment.id %>">
  <h1><%= comment.title %></h1>
  <%= comment.content %>
  <%= render :partial => 'comments/comment', :collection => comments.children %>
</div>

app/views/comments/show.html.erb

<div id="comments">
  <%= render :partial => 'comments/comment', :object => Comment.find(params[:id]) %>
</div>

在魔术发生在当它调用show.html.erb <%= render :partial => 'comments/comment', :object => Comment.find(params[:id]) %>,这将导致部分递归使所有儿童的意见。如果你想有一个极限深度,你可以做到这一点在部分或模型。

修改结果 这将让你与所有以HTML为每个深度间距相同的意见。如果你想制作易于阅读HTML,只需使用render(...).gsub(/^/, "\t")这将工作递归以及生产很好地缩进HTML。

我结合到我自己的方法在app/helpers/application_helper.rb

def indented_render(num, *args)
  render(*args).gsub(/^/, "\t" * num)
end

所以,现在你可以调用<%= indented_render 1, :partial => 'comments/comment', ... %>

修改结果 固定失踪闭合</h1>标签中的示例。

其他提示

要由赫和Samuel给出的ActsAsTree文档中的链接似乎被打破。您可以在

获得文档
 
http://web.archive.org/web/20061011101510/http://wiki.rubyonrails.org/rails/pages/ActsAsTree

(I使用预标记作为链接保持显示错误出于某种原因)。

有一个has_threaded_comments宝石,从来没有使用过它,但它看起来像它正是这样做的: https://github.com/aarongough/has_threaded_comments

你有没有尝试过在你的模型acts_as_tree插件? 这是一个正式的ActiveRecord组件。

http://wiki.rubyonrails.org/rails/pages/ActsAsTree

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top