获取关联rails模型的索引



我正试图根据rails模型相对于相关模型的同级数量为其设置默认值。我设法使它像这样工作;

class Comment < ActiveRecord::Base
belongs_to :post
after_initialize :set_defaults  
def set_defaults             
comment_index = self.post.comments.count
self.title ||= "Default title for comment #{comment_index}"  
end
end 

但这将返回到数据库,并在每次保存新评论时统计帖子,我正在尝试保存数据库调用。我想知道rails中是否已经有什么东西可以执行这种功能?我快速浏览了API,但没有发现任何东西。有人知道吗?

rails计数器缓存功能(您可以在这里了解它-http://railscasts.com/episodes/23-counter-cache-column)可以帮助获取当前评论数,而无需反复计数。但它不会为您节省DB调用以查找相关帖子的时间。

此外,请注意,如果您允许删除注释,那么您当前的实现和计数器缓存可能会导致两个或多个注释具有相同的索引,并且索引不一致(较新的记录的索引低于较旧的记录)。如果后者是一个问题,您可以使用最后一条评论的索引来进行更一致的索引,或者在删除评论时缓存父帖子中的评论数而不减少数量。

最后,如果评论索引仅用于显示(如对帖子页面中的评论进行编号),则可以在前端进行显示。只需按id或创建日期呈现注释,并动态地为每个注释提供索引。

希望能有所帮助。

最新更新