在我的Rails應用程序中,我在多個頁面上渲染了一個部分,並且在這個部分中是一個變量。所以目前,假設我有5個頁面呈現:partial =>「partialname」,而partialname裏面是@variable。如何創建一個具有自己行爲的「部分」?
我可以擁有它,以使partialname在@variable裏面實例化時有自己的動作,而不是從每個渲染該部分的動作調用5次@variable?
謝謝!
在我的Rails應用程序中,我在多個頁面上渲染了一個部分,並且在這個部分中是一個變量。所以目前,假設我有5個頁面呈現:partial =>「partialname」,而partialname裏面是@variable。如何創建一個具有自己行爲的「部分」?
我可以擁有它,以使partialname在@variable裏面實例化時有自己的動作,而不是從每個渲染該部分的動作調用5次@variable?
謝謝!
你可以從視圖中加載@variable:
<% @variable = Variable.find(:whatever) %>
,但有些人認爲在沒有堅持嚴格的MVC這個壞習慣。這確實有支持片段緩存開箱的好處:
<% cache({:variable_id => :whatever}) do %> <% @variable = Variable.find(:whatever) %> . . . <% end %>
是否有在這你可以委託變量訪問的主要觀點被渲染的通用模型?
<%=h @model.variable %>
所以,這是一個代碼每個請求運行5次的問題,你寧願不要?就像,你已經有了一個局部的,它是:
@my_var = MyModel.some_expensive_method
如果是這樣,你可以只緩存結果模型:
def cached_some_expensive_method
@some_expensive_method ||= some_expensive_method()
end
我會在所有的方法創建一個before_filter
那需要共同的行爲。
但是,如果您確實希望部分具有自己的「動作」,請製作一個輔助方法,執行所需的任何「動作-y」事情,然後呈現該部分。這基本上是相同的事情。我之前完成了這個工作,製作了一個模板類型的部分,其中包含需要處理的各種數據。
實際上,這可能是解決方案! – Jess 2009-07-10 20:08:26