根据关联的方法排序

时间:2015-06-15 07:25:25

标签: ruby-on-rails rails-activerecord

我在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

1 个答案:

答案 0 :(得分:0)

您也可以使用group_by代替排序,

Quotation.includes(:business).group_by do |quote|
  quote.business.certified? ? "certified" : "not_certified"
end

它会将包含Hash密钥的certified返回到已认证商家报价的值,并保留在not_certified中。