Rails ActiveRecord 多次 include 同一个表的排序

yakjuly · 2012年10月18日 · 最后由 yakjuly 回复于 2012年10月18日 · 2971 次阅读

在我们系统忠有 3 种类型的公司 我们创建为类 CompanyA, CompanyB, CompanyC 他们用同一个表 companies 用 STI 实现。

有一个合同 Policy 需要三个公司来签约。Policies 表有 comapny_a_id, company_b_id, company_c_id

在页面上需要对 CompanyA 的名称来排序。但是为了避免 N+1 查询 又得 include CompanyB 和 CompanyC.

以前一直头疼这个问题,今天发现可以这样写。

policies = Policy.includes(:company_a).order("companies.name") policies = policies.includes(:company_b, :company_c).page(params[:page])

结果是我想要的。神奇!

不过如果 需要关联表查询 company_b 和 company_c 的时候,不知道还能不能这样排。

这样也可以吧? Policy.includes(:company_a => [:company_b, :company_c]).order("companies.name")

@hooopo 不行,你的写法是 :company_a 与 (company_b, company_c) 关联了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号