Rails:如何使用has_many through in multiple degrees separation

Rails: How to use has_many through in multiple degrees of seperation

我有一系列模型关联使用has_many/belongs_to,如下:

User < Company < Project < Task > Employee > Company(循环)。如下:

我使用 has_many :tasks, through: :projects 在两个分离度为 2 的模型(例如 CompanyTask)之间建立了关联。

是否也可以通过这种方式将模型与多个(3 个或更多)分离度(例如 CompanyEmployee)相关联?这样我也许可以放弃 Company < Employee (因此循环)关联。

目标是在从我的 projects 控制器中保存新员工时能够使 employee.company 可用。

有可能:

例如:CompanyEmployee

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

Rails 用 joins 查询施展魔法

The goal is to be able to make employee.company available in the Employee model, when saving a new employee from my projects controller.

这很确定,因为 Employee 已经属于 Company

如果没有 Company < Employee 关联来指定哪家公司雇用了哪位员工,我不确定您能否做到这一点。

当然,即使没有 Company < Employee 关联,您仍然应该可以调用 employee.projects.first.company 之类的东西。但是没有直接关联,employee.company是不可能的。由于 Employee has_many Projects,您总是必须指定您指的是哪个 Project 的公司。您可以为 shorthand 的 Employee class 添加一个方法,例如:

def company(project)
    project.company
end

并致电 employee.company(@project)。但这并不能真正解决问题。

就我个人而言,我认为保留 Company < Employee 关联会更合乎逻辑。 Employee 这个词意味着有某种雇主(可以是公司、其他人、个体户或任何其他人)雇用该雇员。