当前位置:  开发笔记 > 后端 > 正文

Rails的Reddit样式嵌套/线程/缩进注释?

如何解决《Rails的Reddit样式嵌套/线程/缩进注释?》经验,为你挑选了1个好方法。

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

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

如果有人能指出我这样做的代码,我将不胜感激.

或者也许有一个包含此功能的开源项目.

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

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



1> Samuel..:

使用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

<%= comment.title %>

<%= comment.content %> <%= render :partial => 'comments/comment', :collection => comments.children %>

app/views/comments/show.html.erb

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

魔法发生在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', ... %>

编辑:
修复了示例中缺少结束标记的问题.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有