4

此代码显示了属于当前社区的 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>
4

3 回答 3

8

使用limit方法:

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

这只会将集合的前 10 个元素提供给块。如果你想更复杂,你可以使用类似will_paginate 的东西。

通常,此类数据获取应在控制器中进行。因此,与其拥有一个@community变量来让视图从中获取数据,@community_topics还不如拥有一个预先填充了您要呈现的数据的变量。

于 2012-12-24T17:25:10.790 回答
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 行。

于 2012-12-24T17:26:18.790 回答
0

使用 8.3 重新排序

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

于 2017-12-06T02:47:11.810 回答