3

举个例子:

一个company has_many employees

一个employee has_many tasks

我想按降序获得所有任务。理想情况下,我想做类似Company.all.employees.tasks.order('created_at desc'). 不幸的是,当我完成时employees,我现在有一个 ActiveRecord 对象数组。我遇到这个问题已经有一段时间了,我一直在使用mapand collect,但是按降序排序会产生比我想要的更多的开销。这可以通过 SQL 查询来完成,所以我确信我可以在 ActiveRecord 中完成,但我的研究并没有太大帮助。

编辑:该解决方案应该适用于任意数量的模型。例如,如果 atask has_many items和 aitem has_many sub_items无限。

4

1 回答 1

5

您可以使用的一种方法是使用through

class Company < ActiveRecord::Base
   has_many :employees
   has_many :tasks, through: :employees
end

然后Company将拥有tasks它的所有员工。c 另一种方法是使用连接。所以假设 a Task belongs_toaEmployeeEmployee belongs_toa aCompany

c = Company.first # for a company...
tasks = Task.where(companies:{id: c.id}).joins(employee: :company)

所以我要求所有任务在哪里companies(是的,它是在哪里)。我们使用连接来建立必须连接的表。

于 2013-04-14T20:09:18.007 回答