0

谷歌搜索时我没有找到与我的问题相关的单一结果,但在我看来这是一个相当简单的问题:
Given 是文章模型和评论模型。现在,在文章显示页面上,当列出所有文章的评论时,每条评论都应该在该文章中具有其按时间顺序排列的 id,而不是其整体 id。

关联和一切工作正常,但我不知道如何实现“相对”comment_id,而不采用相当复杂的方式并手动将article_comment_id 列添加到我的评论模型并在我的控制器中处理该属性。

是否没有简单的方法可以在其所属的父模型中调用对象 ID?

4

2 回答 2

1

据我所知,没有一种自动的方法可以询问一条记录在哪里被同行索引。

我这样做的方式只是在遍历数组时跟踪索引。

所以对于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

当评论也被破坏时,您也需要做一些事情。

希望有帮助!

于 2012-06-01T23:23:30.787 回答
1

您可以使用部分遍历它们:

<%= render @article.comments %>

在部分内部,您可以使用 引用评论的计数comment_count。这是 Rails 提供的自动功能。

于 2012-06-01T23:59:13.050 回答