在Ruby中实现排序作为类方法

时间:2012-03-01 19:54:59

标签: ruby-on-rails ruby sorting activerecord class-method

ActiveRecord给了我一组用户。我想通过使用User对象中未持久存储的数据的复杂函数对这些用户进行排序。

有没有办法在不保留数据时使用范围?

有没有办法将sort函数编写为类方法,因此我可以进行如下调用:

sorted_users = User.first(20).sorted_my_way

1 个答案:

答案 0 :(得分:3)

我认为不可能这样做。

可以定义可以像User.first(20).sorted_my_way一样调用的类方法和范围,但这些方法和范围只能将东西附加到您创建的查询中。如果你想在ruby中排序,我认为你需要包装整个东西,如:

class User
  self.sorted_my_way(limit)
    first(20).sort_by {...}
  end
end
User.sorted_my_way(20)

你可以做的另一件事是使用块样式方法:

class User
  self.sorted_my_way
    yield.sort_by {...}
  end
end
User.sorted_my_way { first(20) }