如何限制在视图中加载的记录数量?



这段代码显示了属于当前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

相关内容

  • 没有找到相关文章

最新更新