Pet*_*fel 3 activerecord ruby-on-rails ruby-on-rails-3
举个例子:
一种 company has_many employees
一个 employee has_many tasks
我想按降序获得所有任务。理想情况下,我想做类似的事情Company.all.employees.tasks.order('created_at desc')。不幸的是,等到我通过时employees,我现在有了一个ActiveRecord对象数组。我已经有一段时间遇到了这个问题,并且我一直在使用map和collect,但是按降序排序会产生比我想要的更多的开销。这可以通过SQL查询来完成,因此我确定可以在ActiveRecord中进行,但是我的研究并没有太大帮助。
编辑:该解决方案应适用于任何数量的模型。例如,如果a task has_many items和item has_many sub_items广告是无限的。
您可以使用的一种方法是使用 through
class Company < ActiveRecord::Base
has_many :employees
has_many :tasks, through: :employees
end
Run Code Online (Sandbox Code Playgroud)
然后,所有员工都Company将拥有一份tasks薪水。c另一种方法是使用联接。所以假设Task belongs_toa Employee和Employee belongs_toaCompany
c = Company.first # for a company...
tasks = Task.where(companies:{id: c.id}).joins(employee: :company)
Run Code Online (Sandbox Code Playgroud)
所以我要问所有任务在哪里的companies表(是的,它是在哪里的表)。我们使用联接来建立必须联接的表。
| 归档时间: |
|
| 查看次数: |
1861 次 |
| 最近记录: |