0

我有 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

ie worker 可以由Client和创建Team leader

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

4

2 回答 2

0

由于客户和团队负责人都可以拥有工人,而团队负责人属于客户。因此,我建议通过表而不是 ab、bc 和 ac 使用单个 abc,因为单个 abc 连接表维护起来会更简单。

于 2013-10-31T06:21:56.650 回答
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

这样,您可以通过调用 ac 和 bc 来查询工作人员,它会找到与某个客户/团队负责人相关的所有工作人员。

于 2013-10-31T07:37:59.743 回答