按datesorting由ActiveRecord返回的数组(或任何其他列)

我怎样才能sorting由created_atdate列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')