Sor*_*ami 44 ruby ruby-on-rails
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
Run Code Online (Sandbox Code Playgroud)
此代码显示按ASC排序的集合,但我想将此集合作为DESC进行排序.
我怎样才能做到这一点?
Yan*_*nis 64
更好的是,您可以设置范围来对事件进行排序并在渲染中使用它.
在您的活动模型中:
scope :desc, order("events.event_at DESC")
Run Code Online (Sandbox Code Playgroud)
如果您使用Rails3,您可以在视图中执行以下操作:
<%= render @events.desc %>
Run Code Online (Sandbox Code Playgroud)
小智 50
如http://guides.rubyonrails.org/active_record_querying.html所述
@events.order(event_at: :desc)
Run Code Online (Sandbox Code Playgroud)
Jos*_*phL 12
在Rails 3中,正确的语法是:
<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>
Run Code Online (Sandbox Code Playgroud)
您只需反转已排序的集合:
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>
Run Code Online (Sandbox Code Playgroud)
但正如Yannis所说,当您从理想情况下从数据库中获取内容时,您最好进行排序.
小智 7
我想显示一个排名表并按分数排序。在尝试了几种不成功的方法之后,这就是在这种情况下对我有用的方法。我将此行添加到我的控制器索引方法中。
@teams = Team.all.order(points: :desc)
Run Code Online (Sandbox Code Playgroud)
根据您拥有的对象类型,您将有不同的方式来执行排序功能.
如果您的对象是ActiveRecord,您可以通过以下方式执行此操作:
@events.order('events.event_at DESC')
Run Code Online (Sandbox Code Playgroud)
这将添加一个 ORDER您的SQL查询子句,在从数据库中检索它们之前对这些条目进行排序.
第二种解决方案比较慢,因为您要在ruby中对条目进行排序.
但是如果你正在操纵一系列对象,那么这是你唯一的解决方案.
@events.sort {|a,b| b.event_at <=> a.event_at }
Run Code Online (Sandbox Code Playgroud)
这将循环遍历所有事件,检查每个事件中的最大事件 <=>方法.
您还可以在Enumerables上查看排序文档.
| 归档时间: |
|
| 查看次数: |
73762 次 |
| 最近记录: |