在我正在使用的简单CRUD rails app中,我正在使用名为Opinio的评论宝石
可评论的模型称为帖子。在我的观点中,我试图输出每个帖子的评论数:
<%= post.comments.size %>
这只会产生父评论的数量。它不包括回复。如何获得每篇帖子的评论总数,包括回复?存储评论的宝石在哪里回复?
非常感谢任何帮助!
答案 0 :(得分:3)
我浏览了源代码,apparently条评论可能是其他评论的孩子,但最多只有一个级别:例如: comment1 属于 post1 且 comment2 属于 comment1 ,但 comment3 可以不属于 comment2 (因为 comment2 的父级已经是另一个评论)。
因此,您需要制作的查询听起来像这样:获取 post1 的所有父评论,然后获取之前的所有子评论父评论,然后合并结果。类似的东西:
class Post
# This returns an Array of Comment objects. If you intend to use
# more than the #count method on the result, you should consider
# adding some sort of ordering on the two queries.
def all_comments
parent_comments = Comment.where(:commentable_id => id)
child_comments = Comment.where(:commentable_id => parent_comments.map(&:id))
parent_comments + child_comments
end
end
post = Post.find(1)
post.all_comments.count # The number of all (parent & child) comments of post
如果您的评论班级名称不是评论,请随时将其更改为任何内容(发布相同)。
答案 1 :(得分:0)
您可以尝试使用以下方法检索单个帖子的评论总数:
控制器中的 @post = Post.find(params[:id])
和
<%= post.comments.count %>
。
要发布所有评论,您可以尝试
控制器中的 @posts = Post.all
和
<%= @posts.commments.count %>
。
评论回复将存储在数据库中。检查应用程序中的\ db \ migrate \文件夹,您应该看到注释迁移。如果查看\ db \文件夹,您应该注意到development.sqlite3数据库。使用数据库查看器打开它将允许您查看存储的数据。
更新1
在阅读了Github回购后,我发现了一些事情。首先我假设您使用的是Rails 3? (否则发动机不起作用)
要显示特定项目的注释,根据提供的方法:
opinio_identifier do |params|
next Review.find(params[:review_id]) if params[:review_id]
next Product.find(params[:product_id]) if params[:product_id]
end
在这个方法中,您会收到params变量,并告诉引擎谁拥有该页面的注释。这允许您使用以下路线:
/产品/ 1 /注释
/产品/ 1 /评论/ 1 /
两个自定义只能通过opinio初始化程序进行,它们是默认为true的accept_replies和默认为true的strip_html_tags_on_save。您应该能够在可评论的模型中找到它。
也许你可以试试这个:
<%= Opinio.model_name.comments.count %>
会改为
<%= Opinio.post.comments.count %>