2014-03-03 50 views
0

我想根據它與相關模型相關的兄弟的數量爲導軌模型設置默認值。我設法讓它像這樣工作;獲取相關導軌模型的索引

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 

但是這將返回到數據庫並每次保存新評論時計數帖子,我試圖保存數據庫調用。我想知道是否有軌道內已有的東西會執行這種功能?我通過API快速瀏覽了一下,但沒有發現任何東西。有人知道嗎?

+1

結帳這個gem https://github.com/magnusvk/counter_culture –

回答

2

導軌計數器緩存功能(您可以在此處瞭解到 - http://railscasts.com/episodes/23-counter-cache-column)可以幫助您獲取當前的評論數量,而無需一次又一次地對它們進行計數。但它不會爲您節省數據庫電話以查找相關信息。

另外,請注意,如果您允許刪除評論,那麼您當前的實現和計數器緩存都可能以兩個或更多具有相同索引和不一致索引的評論結尾(索引較低的較新索引爲較低索引) 。 如果後者是一個問題,您可以使用最後一條評論的索引來建立更一致的索引,或者在刪除評論時緩存評論數,而不減少評論數。

最後,如果評論索引僅用於顯示(如在帖子頁面中對評論進行編號),則可以在前端執行。只需按id或創建日期呈現註釋並動態給每個索引。

希望它有幫助。