哪个Active Record Association更适合这些模型?

时间:2012-02-20 22:58:46

标签: ruby-on-rails-3 activerecord polymorphic-associations

我一直在阅读关于RailGuides的活跃记录协会,我发现它非常有用,但我肯定需要帮助来理解一些选择。还在学习。

我有一个具有以下属性的客户端模型:

name
birth_date
address1
etc

然后是具有以下属性的Contract模型:

auth_num
start_date
end_date
client_id .... I think I need this here for the new contract form

此外,具有以下属性的代码模型:

code_name
status
description

我有一个具有以下属性的连接表ClientLines:

Contract_id
Client_id

具有以下属性的连接表CodeLines:

Contract_id
Code_id
Client_id
Units_Alloc   ... each contract might use a combination of codes some of which are 
                  the same in other contracts but they have different number of units 
                  allocated.

我很想使用Polymorphic关联,因为Contract模型与客户端模型和代码模型相关联,但我没有足够的信心继续进行设置,而没有先检查是否有人愿意给我一些关于我列出的例子的指导?

我对指导的希望在于这些问题。

多态关联是我上面列出的模型示例的最佳选择吗?

由于合同使用不同的代码组合,但其他一些代码在其他合同中是相同的,唯一的区别是分配的单位数量,我是否在正确的表格中分配了单位? (基本上我不知道在哪里放置单位分配?)

当我设置数据输入表单以便我可以输入将从客户表和代码表中提取特定属性的新合同时,将Client_id列为Contract模型的属性之一是否合适当然,单位alloc属性仍然在我脑海中成为一个问题,我在哪里把它拉出来?

任何帮助或指示都会有所帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

好吧,我会试一试:)

我理解,我们来自合同,即由一个客户签署并且是关于某些“代码”。所以它可以这样:

class Contract < ActiveRecord::Base
has_one :client
has_many :codes
end

class Client < ActiveRecord::Base
belongs_to :contract
end

class Code < ActiveRecord::Base
belongs_to :contract
end

将customers_id存储在clients表和代码表中的位置。然后你可以进行AR操作,如:

contract = Contact.find_by_auth_num(1234)
contract.client #gets you the client
contract.codes #gets you contracted codes
contract.codes.count #gets you number of contracted codes

或者,如果您希望它更复杂,您可以将关系更改为

class Contract < ActiveRecord::Base
has_one :client
has_many :contract_codes
has_many :codes, :through => :contract_codes
end

class Code < ActiveRecord::Base
has_many :contract_codes
has_many :contracts, :through => :contract_codes
end

中间模型

ContractCode < ActiveRecord::Base
belongs_to :code
belongs_to :contract
end

您可以在特殊列中存储代码数量。当然,所有这些声明必须通过适当的迁移来支持:)我有点清楚了吗?