2012-04-20 56 views
2

假設我有一個名爲「Statistics」或「Friends」的300X300px的塊,此塊需要傳統上應放置在控制器內的一些數據庫對象和邏輯操作,一些實例變量將很好地顯示在視圖/部分中。我想在Rails中渲染控制器/動作

這個區塊可以從我網站上的很多頁面調用,穿過各種控制器和操作。

我該如何解決這個問題,而無需在控制器中重複代碼,也不需要在視圖內放置邏輯。

一個不好的解決方案是將SQL查詢放入視圖中,或者使用iframe來控制單個控制器/操作生成期望的HTML。

任何想法將不勝感激。

回答

3

我想,這是什麼樣的事情,你應該在一個輔助方法做。這可能是一個好主意,用locals爲你局部的,而不是實例變量,以免污染你的看法命名空間:

module ApplicatonHelper 

    def friends_block 
    friends = Friend.where(...) 
    # Assuming the 'friends_block' partial is in a directory 'app/views/shared' 
    render :partial => "shared/friends_block", :locals => {:friends => friends} 
    end 

end 

friends_block部分將使用本地變量:

<div id="friends_block"> 
    <% friends.each do |s| %> 
    ... 
    <% end %> 
</div> 

而其他意見將只使用幫手方法,而不必擔心別的:

<%= friends_block %> 
1

我會將塊放入一個局部區域,並確保該塊所需的實例變量加載到相關控制器和操作的before_filter中。