Rails 3 - 父资源(文章,评论)中的ID而不是整体ID

时间:2012-06-01 22:16:32

标签: ruby-on-rails-3 attributes comments

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

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

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

2 个答案:

答案 0 :(得分: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

当评论被销毁时你也需要做点什么。

希望有所帮助!

答案 1 :(得分:1)

您可以使用partial:

迭代它们
<%= render @article.comments %>

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