2011-02-26 16 views
0

我有一個網站範圍的頁腳,應顯示最近的用戶和帖子列表。我想知道邏輯應該在哪裏獲取這些數據。我應該在UsersController中使用「recent_users」方法,在PostsController中使用「recent_posts」方法,還是應該有一個單獨的FooterController?站點範圍頁腳邏輯屬於Rails 3應用程序的位置?

如何處理_recent_users部分視圖/用戶和_recent_posts部分視圖/帖子並讓頁腳部分呈現它們兩個?

回答

7

所有「業務邏輯」應該放在Model,而不是的控制器中。最近用戶和帖子的查詢應該在UserPost模型中。然後,如果您有站點範圍的視圖元素,請將其移至部分並將該部分添加到application.html.erb中。

# User.rb 
model User 
    def recent 
    # logic and query here 
    end 
end 

 

# Post.rb 
(see above) 

 

# application_controller.rb 
before_filter :get_recent_posts 
before_filter :get_recent_users 
... 
private 
def get_recent_posts 
    @recent_posts = Post.recent 
end 

def get_recent_users 
    @recent_users = User.recent 
end 

 

# application.html.erb 
... 
<%= yield %> 
... 

<%= render :partial => 'layouts/footer', :locals => { :recent_users => @recent_users, :recent_posts => @recent_posts } %> 

 

# layouts/_footer.html.erb 
<% recent_users.each do |user| %> 
    <%= link_to user.name, user %> 
<% end %> 

# same for posts 

一些重要的事情需要注意:

  1. 不訪問在部分實例變量(@foo)...它傳遞到當地人的哈希和訪問它作爲一個變量代替。這只是一般不好的做法

  2. 你也可以使用一個模塊

  3. 直視緩存,因爲你可能不希望兩次擊中你的數據庫中每個頁面加載。您可以在頁腳上使用片段緩存,並每15分鐘過期一次(可能是最好的選擇)。