gpt4 book ai didi

ruby-on-rails - Rails 在没有收集/映射的情况下将嵌套关系作为 ActiveRecord 对象获取

转载 作者:行者123 更新时间:2023-12-04 06:12:19 25 4
gpt4 key购买 nike

举个例子:

一个公司有_很多员工

一个员工有_许多任务

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

编辑:该解决方案应该适用于任何数量的模型。例如,如果一个 task has_many items 和一个 item has_many sub_items 无穷无尽。

最佳答案

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

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

Company 将为其所有员工分配任务。C另一种方法是使用连接。所以假设一个 Task belongs_to 一个 Employee 和一个 Employee belongs_to 一个 公司

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

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

关于ruby-on-rails - Rails 在没有收集/映射的情况下将嵌套关系作为 ActiveRecord 对象获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16003732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com