我在Business中有一个方法,就是certified?方法。
我想使用certified?方法对Quotation模型进行排序。
该方法的返回值是一个布尔值。因此,为了对其进行排序,我希望将经过认证的企业放在列表的首位。
两者之间的关联如下:
Business属于Quotation
下面是我现在是怎么做的:
Quotation.by_biz_id(biz.id).includes(:business).sort_by {|quote| quote.business.certified? <=> quote.business.certified? }
正如你所看到的,它里面有很多方法链接。有没有更新更好的重构代码的方法?
特别是重复条件:{|quote| quote.business.certified? <=> quote.business.certified?}
如果我删除<=>条件,错误是这样的:
ArgumentError: comparison of FalseClass with true failed
发布于 2015-06-16 19:26:58
您还可以使用group_by而不是排序,如
Quotation.includes(:business).group_by do |quote|
quote.business.certified? ? "certified" : "not_certified"
end它将返回包含关键字的Hash,其形式为certified,带有经过认证的业务报价的值,并保留在not_certified中。
https://stackoverflow.com/questions/30839479
复制相似问题