reddit的样式嵌套/线程/缩Rails的意见吗?
-
19-08-2019 - |
题
我还是想知道,如果有人已经建成了螺纹评论系统(因为缺乏一个更好的词)在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组件。