此代码显示属于当前社区的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 :(得分:8)
使用limit
方法:
<% @community.community_topics.limit(10).each do |topic| %>
这只会将集合的前10个元素提供给块。如果您想要更复杂,可以使用类似will_paginate的内容。
通常,此类数据提取应在控制器中进行。因此,不是在视图获取数据的情况下使用@community
变量,而是使用@community_topics
,并预先填充要渲染的数据。
答案 1 :(得分: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行。
答案 2 :(得分:0)
使用8.3重新排序
重新排序方法会覆盖默认范围顺序。例如:
@categories = Category.includes(:subcategories).where(active: true).references(:subcategories).order(name: :asc).reorder('categories.name ASC', 'subcategories.name ASC')