Rails 6有许多via多重连接



技术:Rails/ActiveRecord 6.1.x

最终可能没有正常的方法来做到这一点,但这是我的目标:

通过4个连接连接表1到表2,最终表1在表2上有_many。下面是一个例子:

Table1 = Person ( has many pets )
Join1 = Pet ( belongs to person, has many pet toys )
Join2 = PetToy ( belongs to pet, belongs to toy maker )
Join3 = ToyMaker ( has many pet toys, belongs to investing company )
Join4 = InvestingCompany ( has many toy makers, belongs to ceo )
Table2 = CEO ( has many investing companies )

我想在"Person"中有"has many:ceos"这样的东西。但是"PetToy"的跳跃给我带来了麻烦。我可以使用'delegate xyz to abc'从PetToy的实例获得.ceo以返回表2 Ceo。我从Person一直到PetToys。但我不确定如何弥合这一差距,以获得'has_many'的'belongs_to'链。

这可能是不可能的吗?

Table1 = Person(有很多宠物)Join1 =宠物(属于人,有很多宠物玩具)Join2 = PetToy(属于宠物,属于玩具制造商)Join3 = ToyMaker(有很多宠物玩具,属于投资公司)Join4 =投资公司(拥有许多玩具制造商,属于首席执行官)表2 = CEO(有很多投资公司)

要获得一个人的所有首席执行官,这是join。

Ceos.joins(companies: { toy_makers: { pet_toys: { pet: :people } } }
.where(people: {id: person.id})

根据你的需要,你也可以使用has many through。

class Ceo {
has_many :companies
has_many :toy_makers, through: :companies
}
class ToyMaker {
has_many :pet_toys
has_many :people, through: :pet_toys
}
Ceos.joins(toy_makers: { :people }
.where(people: {id: person.id})

最新更新