2012-06-01 41 views
0

我还没有找到一个单一的结果与我的问题时,谷歌,但它在我看来是一个相当简单的问题:
鉴于是文章模型和评论模型。现在,在文章展示页面上,当列出所有文章的评论时,每篇评论应该在该文章中具有其按时间顺序的编号,而不是其整体编号。Rails 3 - 内部资源(文章,评论),而不是整体ID

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

有没有简单的方法来调用它的父模型中它的belongs_to对象ID?

回答

1

据我所知,没有一种自动的方式来询问一个记录与同伴索引的位置。

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

所以对于ERB:

<% @article.comments.each_with_index do |comment, index| %> 
    <div class="comment_id"><%= index + 1 %></div> 
    <div class="content"><%= comment.content %></div> 

或者HAML:

[email protected]_with_index do |comment, index| 
    .comment_id= index + 1 
    .content= comment.content 

如果你的分页,你需要有index + 1 + (page*num_items)什么的。

你可以保存索引在数据库中,通过添加作为iteration_id这样一列,然后添加一个创建之前,过滤器的评论模式是这样的:

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 

你需要做一些事情的时候评论也被销毁。

希望有帮助!

+0

所有的方法都很棒!非常感谢你!我特别喜欢before_create过滤器!我想我会用评论表中的额外属性去这样做。对于以后可能的引用特性,该iteration_id属性应该完全正确吗? (例如通过在评论表单(我打算实现这样的功能)中简单地撰写评论的iteration_id(#15 ie)来引用评论) –

+0

Yep - iteration_id将完美适用于此。你非常欢迎。 – iHiD

+0

我实现了iteration_id,一切正常,但是,有一个问题,这是一个逻辑结果:删除评论时,comments.count将为-1,因此可能会有具有相同iteration_id的注释。现在,一种方法可能是完全伪造销毁行为,而是为每个评论创建一个“可见” - 原因,以便这个计数永远不会受到影响。但是这种方法效率不高。最好的是一种计数缓冲器,它始终保持最后一个计数值,永远不会减少,在+1上生成。有没有这样的事情? –

1

您可以通过他们使用的部分重复:

<%= render @article.comments %> 

里面的部分,你可以参考意见的计数与comment_count。这是一个由Rails提供的自动功能。

+0

谢谢你的回答瑞恩!我目前正在使用iHiD的方法,但无论如何都要感谢你为那个伟大的comment_count方法! –