2011-10-20 31 views
7

這是一個跟進Creating "feeds" from multiple, different Rails models。在這個問題上,tadman建議從三個型號(票務,郵政,報告)創造最近項目的用戶飼料的這種方法:高效地從多個導軌模型創建「feed」?

@items = [ Ticket, Post, Report ].inject([ ]) do |a, with_class| 
    a + with_class.find(:all, :limit => 10, :order => 'created_at DESC') 
end.sort_by(&:created_at).reverse[0, 10] 

他認爲這是將工作的方法,但不一定會是最有效率的。他建議的另一種方法是「創建一個與各種記錄有多態關聯的索引表」。

我更多地瞭解這個替代的解決方案很感興趣,似乎都更高效,更優雅。誰能告訴我如何做到這一點?讓我們用最後一個問題的背景信息作爲基礎。

回答

6

我曾經做過的,有一個單獨的模型飼料(feeds_controller)和更新它在after_save回調所有interesting模型。因此,舉例來說,如果你有一個模型的文章,有一個after_save的回調函數:

def after_save 
    feed = Feed.new 
    feed[:model_name] = 'Article' 
    feed[:item_id] = id 
    feed.save 
end 

然後,你可以線性訪問飼料就像任何其他的模式。計算費用是在保存Feed時發生的,而不是從Feed中讀取的。

哦,你也可以有Feed has_many :article; has_many :user, has_many :status等,然後:include所有這些資源在飼料中,並在視圖中呈現它們。希望這是有道理的;-)

+0

這看起來很有前途。謝謝! – jay

+0

有關如何將其放入控制器並將其呈現在視圖中的任何想法?不確定您的意思是「然後:將所有這些資源包含在Feed中」? – Terryfrancis