Rails通过proc对集合进行排序

时间:2015-08-19 19:42:19

标签: mysql ruby-on-rails ruby

我想使用自定义proc对系列进行排序。我知道Rails有订单方法,但我不相信这适用于procs,所以我只是使用sort_by。有人可以详细介绍我牺牲的速度,或建议替代方案吗?我的理解是,顺序的确切实现将取决于适配器(在我的例子中,它是mysql),但我想知道是否有办法利用它来加快排序。

举个例子,我想这样做:

Model.order(|m| m.get_priority )

但我被迫这样做

Model.all.sort_by{|m| m.get_priority}

1 个答案:

答案 0 :(得分:3)

sort_by是在Ruby级别实现的,它是Ruby的一部分,而不是ActiveRecord。因此,数据库不会执行排序,而是由Ruby解释器执行。

这不是最佳解决方案,因为DBMS通常可以更有效地对数据进行排序,因为它们可能会使用现有索引。

如果get_priority在数据库之外执行某种计算,那么除非您想要缓存get_priority的结果,否则您不会有很多替代此处发布的代码的替代方法作为Model表中的一列,并使用ActiveRecord order语句对其进行排序,该语句将生成ORDER BY SQL语句。