订购集合作为DESC

时间:2010-10-20 09:14:45

标签: ruby-on-rails ruby

<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>

此代码显示以ASC命令的集合,但我想将此集合命名为DESC。

我怎样才能做到这一点?

8 个答案:

答案 0 :(得分:62)

更好的是,您可以设置范围来对事件进行排序并在渲染中使用它。

在您的活动模型中:

scope :desc, order("events.event_at DESC")

如果您使用Rails3,您可以在视图中执行以下操作:

<%= render @events.desc %>

答案 1 :(得分:47)

http://guides.rubyonrails.org/active_record_querying.html

所述
@events.order(event_at: :desc)

答案 2 :(得分:11)

在Rails 3中,正确的语法是:

<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>

答案 3 :(得分:8)

您可以撤消已排序的集合:

<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>

但正如Yannis所说,当您从理想情况下从数据库中获取内容时,最好进行排序。

答案 4 :(得分:6)

根据您拥有的对象类型,您将有不同的方式来执行排序功能。

如果您的对象是ActiveRecord,您可以通过以下方式执行此操作:

@events.order('events.event_at DESC')

这会在SQL查询中添加ORDER子句,在从数据库中检索条目之前对其进行排序。

第二种解决方案速度较慢,因为您要在ruby中对条目进行排序 但是,如果您正在操纵一系列对象,那么这是您唯一的解决方案。

@events.sort {|a,b| b.event_at <=> a.event_at }

这将遍历所有事件,使用<=>方法检查每个事件中的最大事件。

您还可以在Enumerables上看到the sort documentation

答案 5 :(得分:2)

我想通过积分desc显示联赛表和订单。在尝试了几种不成功的方法后,这对我来说在这种情况下起了作用。我将这一行添加到我的控制器索引方法中。

e

答案 6 :(得分:1)

您可以使用带参数的desc方法来完成此操作。

见下面的例子

@events.desc(:event_at)

这将以event_at字段的降序为您提供@events。

感谢。

答案 7 :(得分:0)

views/sources/show.html.erb 中,以下 <%= render @source.docs.order(page_no: :asc) %> 在 Rails 6 中有效。

这调用 _doc.html.erb 包含

<li>
  <%= doc.content %> (p. <%= doc.page_no %>) 
  <span class="btn btn-outline-success btn-xs"><%= link_to 'Show', doc %></span>
  <span class="btn btn-outline-warning btn-xs"><%= link_to 'Edit', edit_doc_path(doc) %></span>
</li>

Rails 魔法!一个有序列表,其中包含引用 docssource 的选定字段。并且可以点击编辑或查看整个doc

谢谢。这里的一个答案在排序部分指出了我。