我正在尝试根据相对于关联模型的兄弟节点数为轨道模型设置默认值。我设法让它像这样工作;
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,但它没有发现任何东西。有谁知道吗?
答案 0 :(得分:2)
rails counter cache功能(你可以在这里了解它 - http://railscasts.com/episodes/23-counter-cache-column)可以帮助获取当前的注释计数,而无需反复计算它们。但它不会为你节省数据库调用以找到相关的帖子。
另外,请注意,如果您允许删除注释,那么当前实现和计数器缓存都可能最终导致两个或多个具有相同索引的注释以及索引不一致(较新的记录具有比旧版本更低的索引)。 如果后者是一个问题,您可以使用最后一个注释的索引来获得更一致的索引,或者通过缓存父帖子中的注释计数而不减少删除注释时的数字。
最后,如果评论索引仅用于显示(如在帖子页面中对评论进行编号),则可以在前端进行。只需按id或创建日期呈现注释,并动态地为每个注释提供。
希望它有所帮助。