我在Business
中有一个certified?
方法。
我想使用Quotation
方法对certified?
模型进行排序。
该方法的返回值是布尔值。因此,为了对其进行排序,我希望将经过认证的企业放在首位。
以下是关联:
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
答案 0 :(得分:0)
您也可以使用group_by
代替排序,
Quotation.includes(:business).group_by do |quote|
quote.business.certified? ? "certified" : "not_certified"
end
它会将包含Hash
密钥的certified
返回到已认证商家报价的值,并保留在not_certified
中。