gpt4 book ai didi

ruby-on-rails - Rails 的 Reddit 样式嵌套/线程/缩进注释?

转载 作者:行者123 更新时间:2023-12-04 11:17:15 25 4
gpt4 key购买 nike

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

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

如果有人可以指出我执行此操作的代码,将不胜感激。

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

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

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

最佳答案

使用 acts_as_tree 插件应该使这相当容易实现。安装它使用
ruby script/plugin install acts_as_treeapp/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>示例中的标记。

关于ruby-on-rails - Rails 的 Reddit 样式嵌套/线程/缩进注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/463936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com