Ruby on rails 从单个查询中获取所有记录

Ruby on rails 从单个查询中获取所有记录,ruby-on-rails,has-many-through,Ruby On Rails,Has Many Through,我有三种型号 a是客户端 b是团队领导 c是工人 现在 a有多个b到ab b有多个c到bc a有许多c到ac ab、bc、ac是由通过关联创建的我的联接表 现在 a可以创建b b可以创建c和 a可以创建c i、 e worker可以由客户和团队领导创建 现在我需要检索由client和TeamLeader创建的所有workers。 虽然我可以在控制器中编写if/else条件,但我只想从单个查询中获取所有记录? 或者我应该使用正常的if/else条件吗?因为客户和团队领导都可以有员工,而团队领导属于

我有三种型号

a是客户端

b是团队领导

c是工人

现在

a有多个b到ab

b有多个c到bc

a有许多c到ac

ab、bc、ac
是由
通过关联创建的我的联接表

现在

a可以创建b

b可以创建c

a可以创建c

i、 e worker可以由
客户
团队领导
创建

现在我需要检索由
client
TeamLeader
创建的所有
workers
。 虽然我可以在控制器中编写
if/else
条件,但我只想从单个查询中获取所有记录?
或者我应该使用正常的if/else条件吗?

因为客户和团队领导都可以有员工,而团队领导属于客户。所以,
我建议使用单个abc直通表,而不是ab、bc和ac,因为单个abc联接表的维护比较简单。

这里您可能需要知道两件事:

1、对于一对多关系,不需要联接表。联接表用于多对多关联; 默认情况下,Rails使用model_id(在您的示例中是client_id)进行表映射。如果您确实需要保持“谁创建了谁”的关系,请在worker模型中使用“create_by”列,而不是“client_id”。但我想你们只需要一种归属关系,因为在现实世界中,客户不能“创造”一个员工p

此外,我假设您的员工没有直接与客户联系,那么客户应该只能通过其领导找到员工。在这种情况下,您需要:

在模型A(客户机)中:

在模型B中(组长):

在模型C中(工人):


这样,您可以通过调用a.c和b.c查询工人,它将找到与某个客户/团队领导相关的所有工人

您是否正在保存由工作人员创建的?不,我不是在工作人员模型中保存由创建的您如何区分谁创建了什么?通过正常的客户端id。!!我没有使用一对多关系。所有这些模型之间都有
多对多
关联,我的系统是这样的,只是需要维护客户创建的工人和团队领导属于同一组织
has_many :b
has_many :c, :through => :b
belongs_to :a
has_many :c
belongs_to :b