据我所知,没有一种自动的方式来询问一个记录与同伴索引的位置。
我这样做的方式只是在遍历数组的同时跟踪索引。
所以对于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
你需要做一些事情的时候评论也被销毁。
希望有帮助!
所有的方法都很棒!非常感谢你!我特别喜欢before_create过滤器!我想我会用评论表中的额外属性去这样做。对于以后可能的引用特性,该iteration_id属性应该完全正确吗? (例如通过在评论表单(我打算实现这样的功能)中简单地撰写评论的iteration_id(#15 ie)来引用评论) –
Yep - iteration_id将完美适用于此。你非常欢迎。 – iHiD
我实现了iteration_id,一切正常,但是,有一个问题,这是一个逻辑结果:删除评论时,comments.count将为-1,因此可能会有具有相同iteration_id的注释。现在,一种方法可能是完全伪造销毁行为,而是为每个评论创建一个“可见” - 原因,以便这个计数永远不会受到影响。但是这种方法效率不高。最好的是一种计数缓冲器,它始终保持最后一个计数值,永远不会减少,在+1上生成。有没有这样的事情? –