我通过定义如下方法向 ActiveRecord 模型添加了自定义排序:
class MyClass < ActiveRecord::Base
belongs_to :parent_model #this would be the many in a has_many relationship
def <=>(other)
self.att <=> other.att
end
end
可以这么说,比较中实际使用的逻辑比这个例子要复杂一些,不是用 SQL 可以完成的。
由于此类仅用作包含模型中的嵌套字段,因此似乎没有直接的位置来对结果集进行排序。在控制器中,:my_class 是包含的一部分,用于急切加载,但在视图之前我不会对对象数组做任何其他事情(当我执行 form.fields_for :my_class 时)。我真正想要的是能够使用我的逻辑排序来做相当于 default_scope 的事情,但我认为这是不可能的。现在,我唯一的选择似乎是在控制器中添加一个额外的行,只是为了对这个结果进行排序,但这似乎不是正确的做法。
我在这里缺少什么更优雅的东西吗?