2009-07-10 47 views
0

在我的Rails應用程序中,我在多個頁面上渲染了一個部分,並且在這個部分中是一個變量。所以目前,假設我有5個頁面呈現:partial =>「partialname」,而partialname裏面是@variable。如何創建一個具有自己行爲的「部分」?

我可以擁有它,以使partialname在@variable裏面實例化時有自己的動作,而不是從每個渲染該部分的動作調用5次@variable?

謝謝!

回答

0

你可以從視圖中加載@variable:

 
<% @variable = Variable.find(:whatever) %> 

,但有些人認爲在沒有堅持嚴格的MVC這個壞習慣。這確實有支持片段緩存開箱的好處:

 
<% cache({:variable_id => :whatever}) do %> 
<% @variable = Variable.find(:whatever) %> 
. . . 
<% end %> 

是否有在這你可以委託變量訪問的主要觀點被渲染的通用模型?

 
<%=h @model.variable %> 
+0

實際上,這可能是解決方案! – Jess 2009-07-10 20:08:26

0

所以,這是一個代碼每個請求運行5次的問題,你寧願不要?就像,你已經有了一個局部的,它是:

@my_var = MyModel.some_expensive_method 

如果是這樣,你可以只緩存結果模型:

def cached_some_expensive_method 
    @some_expensive_method ||= some_expensive_method() 
end 
2

我會在所有的方法創建一個before_filter那需要共同的行爲。

但是,如果您確實希望部分具有自己的「動作」,請製作一個輔助方法,執行所需的任何「動作-y」事情,然後呈現該部分。這基本上是相同的事情。我之前完成了這個工作,製作了一個模板類型的部分,其中包含需要處理的各種數據。

1

Rails Sub-controllers?

見我對這個答案。

這裏非常類似的方法,在使用過濾器之前使用控制器繼承或需要時使用模塊。

相關問題