2012-12-24 43 views
2

此代碼顯示屬於當前社區的CommunityTopic的所有記錄。 如何限制數量爲10條記錄以在此處顯示?如何限制在視圖中加載的記錄數?

<ul> 
    <% @community.community_topics.each do |topic| %> 
    <li> 
    <%= link_to topic.title, community_topic_path(@community, topic) %> 
    <%= link_to topic.user.user_profile.nickname, community_topic_path(@community, topic) %> 
    </li> 
    <% end %> 
</ul> 
+0

你檢查嗎? http://stackoverflow.com/questions/533837/automatic-counter-in-ruby-for-each – theMarceloR

回答

7

使用limit方法:

<% @community.community_topics.limit(10).each do |topic| %> 

這將只提供集合的第10種元素的塊。如果你想更復雜一點,你可以使用類似will_paginate的東西。

通常,這種數據提取應該發生在控制器中。因此,不是在視圖獲取數據時使用@community變量,而是使用@community_topics,該變量已預填充要渲染的數據。

+0

非常感謝!這工作正常:) – HUSTEN

+2

你最好使用'limit(10)',因爲'take'來自Array,並且所有的community_topics都會被提取到內存中,儘管只會顯示10個。 – jdoe

+0

修復了,謝謝。 – Femaref

2

你不應該在視圖中這樣做,而應該在控制器中。您可以使用limit作爲@Fermaref建議,或者您可以使用分頁程序來幫助您,例如will_paginate或kaminari。

遷此控制器,嘗試這樣的事情:

def some_action 
    @community = Community.find(params[:id]) 
    @community_topics = @community.community_topics.order(:some_attribute).limit(10) 
end 

然後,只需使用@community_topics在您的視圖。這裏的一個優點是,如果需要,您現在可以將此邏輯移至私有方法以供重用。您還可以在功能上測試@community_topics限制爲10行。

+0

我不應該這樣做的原因是什麼?以及如果我在當前的Community#show中顯示10個最新主題會怎麼樣?我應該用這種方式嗎?如果他們希望看到更多,可以按'顯示所有'並移動到CommunityTopic#index – HUSTEN

+1

在視圖中修改/截斷集合被認爲是糟糕的設計,因爲它會讓您的邏輯更難測試,調試和重構。有時候它不會得到幫助,但是儘可能地用於渲染的數據收集屬於控制器。 – PinnyM

+0

好的,非常感謝非常感謝!在這種情況下,如何將其替換爲基於控制器? – HUSTEN

相關問題