我想使用自定义过程对集合进行排序。我知道 Rails 有 order 方法,但我不相信这适用于 procs,所以我只是使用 sort_by 代替。有人可以详细说明我牺牲的速度,或提出替代方案吗?我的理解是,order 的确切实现将取决于适配器(在我的例子中,是 mysql),但我想知道是否有方法可以利用这一点来加快排序速度。
举个例子,我想这样做:
Model.order(|m| m.get_priority )
但我被迫这样做
Model.all.sort_by{|m| m.get_priority}
最佳答案
sort_by
是在 Ruby 级别实现的,它是 Ruby 的一部分,而不是 ActiveRecord。因此,排序不会由数据库执行,而是由 Ruby 解释器执行。
这不是最佳解决方案,因为 DBMS 通常在对数据进行排序方面更有效,因为它们可能使用现有索引。
如果 get_priority
在数据库外部执行某种计算,那么您在此处发布的代码没有太多替代方案,除非您想缓存 get_priority 的结果
作为 Model
表中的一列,并使用 ActiveRecord order
语句对其进行排序,这将生成 ORDER BY
SQL 语句.
关于mysql - Rails 按 proc 对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104288/