首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reddit风格的Rails嵌套/线程/缩进注释?

问Reddit风格的Rails嵌套/线程/缩进注释?
EN

Stack Overflow用户
提问于 2009-01-21 02:34:15
回答 3查看 7.4K关注 0票数 15

我想知道是否有人已经在Rails中构建了一个用于线程注释的系统(因为没有更好的术语),或者我是否需要自己构建它。

如果不清楚,我指的是一个类似Reddit的评论系统,它自动缩进回复,使它们看起来像树的分支(最好是像Reddit一样投票)。

如果有人能给我指点能做到这一点的代码,我将不胜感激。

或者,可能有一个开放源码项目包含此功能。

到目前为止,我还没有在Rails中找到一个。

另外,在Rails论坛上问这个问题是不是更好,如果是的话,是哪一个论坛?(我是Rails新手)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-21 03:10:28

使用acts_as_tree插件可以使这一点变得相当容易实现。使用以下命令安装它

ruby script/plugin install acts_as_tree

app/models/comment.rb

代码语言:javascript
复制
class Comment < ActiveRecord::Base
  acts_as_tree :order => 'created_at'
end

db/migrate/20090121025349_create_comments.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
<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

代码语言:javascript
复制
<div id="comments">
  <%= render :partial => 'comments/comment', :object => Comment.find(params[:id]) %>
</div>

当调用<%= render :partial => 'comments/comment', :object => Comment.find(params[:id]) %>时,在show.html.erb中发生了神奇的事情,这将导致partial递归地呈现所有子注释。如果需要对深度进行限制,可以在部分或模型中进行。

编辑:

这将使您在HTML中为每个深度保留相同间距的所有注释。如果你想产生易于阅读的超文本标记语言,只需使用render(...).gsub(/^/, "\t")就可以了,这也会递归地产生缩进良好的超文本标记语言。

我在app/helpers/application_helper.rb中将它合并到我自己的方法中

代码语言:javascript
复制
def indented_render(num, *args)
  render(*args).gsub(/^/, "\t" * num)
end

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

编辑:

修复了示例中缺少结束</h1>标签的问题。

票数 40
EN

Stack Overflow用户

发布于 2011-02-19 08:19:18

有一个从未使用过的has_threaded_comments gem,但它看起来就是这样:https://github.com/aarongough/has_threaded_comments

票数 1
EN

Stack Overflow用户

发布于 2009-01-21 02:57:48

你在你的模型上试过acts_as_tree插件了吗?它是一个官方的ActiveRecord组件。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/463936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档