这段代码显示了属于当前Community的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>
使用limit
方法:
<% @community.community_topics.limit(10).each do |topic| %>
这将只向块提供集合的前10个元素。如果您想要更复杂,您可以使用类似will_paginate的东西。
一般来说,这样的数据获取应该在控制器中进行。因此,而不是有一个@community
变量,视图从哪里获得数据,有一个@community_topics
以及,这是预先填充的数据,你想要渲染。
通常不应该在视图中这样做,而应该在控制器中这样做。您可以像@Fermaref建议的那样使用limit
,或者您可以使用分页器来帮助您,例如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行进行功能测试。
使用8.3 reorder
reorder方法覆盖默认的作用域顺序。例如:@categories = Category.includes(:subcategories).where(active: true).references(:subcategories).order(name: :asc).reorder('categories.name ASC', 'subcategories.name ASC')
http://guides.rubyonrails.org/active_record_querying.html