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

时间:2013-10-30 12:57:39

标签: ruby-on-rails has-many-through

我有3个模特

a is client

b is team leader

c is worker

现在

a has_many b through ab

b has_many c through bc

a has_many c through ac

ab,bc,ac是由has_many through association

创建的联接表

现在

a can create b

b can create c

a can create c

即工作人员可以由ClientTeam leader创建。

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

2 个答案:

答案 0 :(得分:0)

由于客户和团队负责人都可以拥有工作人员并且团队负责人属于客户端。所以, 我建议有一个单独的abc通过表而不是ab,bc和ac作为单个abc连接表将不那么复杂维护。

答案 1 :(得分:0)

您可能需要了解以下两件事:

1,对于一对多关系,您不需要连接表。连接表用于多对多关联; 2,Rails默认使用model_id(在您的示例中为client_id)进行表映射。如果您确实需要保留“谁创建了谁”关系,请在工作模型中使用“create_by”列而不是“client_id”。但我猜你在这里只需要一个belongs_to关系,因为在现实世界中,客户不能“创造”一个工人。 :P

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

在模型A(客户)中:

has_many :b
has_many :c, :through => :b

模型B(团队领导):

belongs_to :a
has_many :c

在模型C(工人)中:

belongs_to :b

通过这种方式,您可以通过调用a.c和b.c来查询工作程序,它将查找与某个客户/团队负责人相关的所有工作人员。