<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
此代码显示以ASC命令的集合,但我想将此集合命名为DESC。
我怎样才能做到这一点?
答案 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 魔法!一个有序列表,其中包含引用 docs
的 source
的选定字段。并且可以点击编辑或查看整个doc
。
谢谢。这里的一个答案在排序部分指出了我。