1

我已經使用inherited_resource插件構建了一個應用程序,並且它已準備好投入生產。使用inherited_resources進行緩存

現在我正在尋找如何爲相同的應用程序實現緩存。由於我有一些依賴於current_user的頁面片段,我將使用片段緩存機制。

有人可以請我提供一個指針或資源,它有助於爲基於繼承的資源的視圖和控制器實現片段緩存嗎?

感謝, 阿賈伊·庫馬爾摹

回答

0

我不使用inherited_resources,但我的理解是,它只是一個控制器的快捷方式。你的意見應該是標準的,在這種情況下,你可以使用分段緩存,如在Rails指南中所描述的http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching

你試過嗎?如果這不起作用,請告訴我們您的觀點是什麼樣子的。


編輯:迴應評論。

啊好吧,所以一般情況下,如果你使用片段緩存,沒有必要不調用控制器動作,因爲你不會設置任何變量,如果沒有變量,那麼爲什麼你不是使用頁面緩存?

爲了防止查詢被觸發,ActiveRecord 3.0與arel是你的朋友。例如,如果你在你的動作中放置了@posts = Post.where(:published => true),那麼直到你在視圖中調用@ posts.each,它纔會被調用,所以如果你把它放在緩存塊中,它會永遠不會被調用。我不確定默認情況下,inherited_resources會做什麼,但鑑於它是由JoséValim編寫的,我想他默認會使用ActiveRecord的這個特性,如果不是這樣,它很容易定製。您可以通過爲開發環境啓用緩存並查看日誌來查看正在觸發的查詢來測試它。

+0

你是對的我正在使用片段緩存來緩存視圖。但是當請求到達服務器時,我無法阻止控制器代碼(和數據庫查詢)的執行。我正在尋找的是一種優雅的方式,我可以根據緩存來停止正在執行的inherited_resource控制器代碼。 – 2011-05-29 16:56:13

+0

我更新了回覆以響應此評論。 – gtd 2011-05-29 22:53:21

+0

我想你是對的。 ARel是這裏的關鍵。我確認後會回覆。 – 2011-05-30 01:18:39