我正在打印一份清单,按此命令:
<% @users.order(:number).each do |u| %>
<%= u.name %>
<% end %>
但有些用户的:number
值相同,在这种情况下,记录似乎是根据time_created
进行排序的。当记录具有与用于订购它们的属性相同的值时,如何设置要使用的备用或二级订购系统?
答案 0 :(得分:2)
您可以继续添加order
方法。
@users.order(:number, :name, :last_logged_in, :id)
如果数字相同,它将打破与name的关系,然后是last_logged_in,然后是id。这都是在数据库中完成的。
如果您已将数据存储在内存中,则可以使用Ruby的sort_by
方法。
答案 1 :(得分:1)
您可能希望使用sort_by
代替order
。
@users.sort_by {|u| [u.number, u.second_option] }
将首先按数字排序,然后如果数字匹配,它将拉出第二个选项的任何内容并进行比较。从技术上讲,你可以根据需要在该数组中输入尽可能多的东西。
编辑:实际上,有一个类似的问题已经回答here