按datesorting由ActiveRecord返回的数组(或任何其他列)
我怎样才能sorting由created_at
date列ActiveRecord查询返回的数组?
一旦查询被执行,就会发生这种情况。
请不要告诉我在查询中这样做,因为我需要在视图中发生这种情况。
Ruby包含了对开箱即用的支持。
sorted = @records.sort_by &:created_at
但是,这似乎与显示没有太大关系,可能属于控制器。
虽然Ruby Enumerable非常棒,但是ActiveRecord查询实际上会返回一个ActiveRecord :: Relation,它的查询还没有被评估(Lazy Loading),并且可以调用它的order方法来将这个处理转移到数据库比基于Enumerable的策略好得多。
使用Enumerable进行sorting也会混淆数据库中的分页。 在视图中没有什么可以阻止订单策略的应用。 不过,我倾向于把这个放在模型的范围之内。
sorted = @records.order(:created_at)
只需调用sorting集合,传入代码块,告诉Ruby你想如何sorting:
collection.sort { |a,b| a.created_at <=> b.created_at }
请在这个掠夺,并检查复杂性。
Model.all.sort_by{|m| m.created_at} #=> O(log n) #versus Model.order(“created_at DESC”) #=> O(1)
sortingActiveRecord数组的最佳方法是使用默认方法顺序
@ users.order(:created_at)
这是最快也是最正确的解决scheme,因为在这种情况下,它会从数据库返回sorting的数组,并且您不需要在类中使用任何其他操作,例如,如果您将使用build议的sort_by
,它将循环抛出数组中的每个元素,之后它不会是一个ActiveRecord数组,在我看来并不酷。
order
可以使用string和sumbols,这是非常有用的,它需要多个参数
@ users.order('created_at asc,first_name desc,last_name asc')