谷歌搜索时我没有找到与我的问题相关的单一结果,但在我看来这是一个相当简单的问题:
Given 是文章模型和评论模型。现在,在文章显示页面上,当列出所有文章的评论时,每条评论都应该在该文章中具有其按时间顺序排列的 id,而不是其整体 id。
关联和一切工作正常,但我不知道如何实现“相对”comment_id,而不采用相当复杂的方式并手动将article_comment_id 列添加到我的评论模型并在我的控制器中处理该属性。
是否没有简单的方法可以在其所属的父模型中调用对象 ID?
谷歌搜索时我没有找到与我的问题相关的单一结果,但在我看来这是一个相当简单的问题:
Given 是文章模型和评论模型。现在,在文章显示页面上,当列出所有文章的评论时,每条评论都应该在该文章中具有其按时间顺序排列的 id,而不是其整体 id。
关联和一切工作正常,但我不知道如何实现“相对”comment_id,而不采用相当复杂的方式并手动将article_comment_id 列添加到我的评论模型并在我的控制器中处理该属性。
是否没有简单的方法可以在其所属的父模型中调用对象 ID?
据我所知,没有一种自动的方法可以询问一条记录在哪里被同行索引。
我这样做的方式只是在遍历数组时跟踪索引。
所以对于ERB:
<% @article.comments.each_with_index do |comment, index| %>
<div class="comment_id"><%= index + 1 %></div>
<div class="content"><%= comment.content %></div>
或 HAML:
-@article.comments.each_with_index do |comment, index|
.comment_id= index + 1
.content= comment.content
如果你的分页,你需要有index + 1 + (page*num_items)
什么的。
您可以在数据库中保存一个索引,方法是添加一个列iteration_id
,然后向 Comment 模型添加一个创建前过滤器,如下所示:
before_create do
last_comment = article.comments.unscoped.order("iteration_id DESC").select('iteration_id').first
self.iteration_id = last_comment ? last_comment.iteration_id + 1 : 0
true
end
当评论也被破坏时,您也需要做一些事情。
希望有帮助!
您可以使用部分遍历它们:
<%= render @article.comments %>
在部分内部,您可以使用 引用评论的计数comment_count
。这是 Rails 提供的自动功能。