2012-02-20 49 views
0

我一直在閱讀鐵軌上的活動記錄協會,我發現它非常翔實,但我肯定需要幫助理解一些選擇。仍在學習。哪個Active Record Association更適合這些模型?

我有一個具有以下屬性的客戶端模式:

name 
birth_date 
address1 
etc 

然後,合同模式具有這些屬性:

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 

而且連接表的代碼行具有這些屬性:

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. 

我忍不住要使用多態關聯,因爲合同模型與客戶端模型和代碼模型相關聯的,但我沒有信心足以繼續進行設置,而不必先檢查是否有人願意爲我列出的示例提供一些指導。

我的指導希望在於這些問題。

多態關聯是我上面列出的模型示例的最佳選擇嗎?

由於合同使用不同的代碼組合,但某些代碼在其他合同中是相同的,唯一的區別是分配的單元數量,我是否在正確的表格中分配了單位? (本質上,我不知道在哪裏放置單元分配?)

當我設置數據輸入表單時,我可以輸入新的合同,它將從客戶表和代碼表中提取特定屬性,是否適當將Client_id列爲合同模型的屬性之一,當然單位alloc屬性仍然在我的腦海裏成爲一個問題,我從哪裏獲得?

任何幫助或指示將是最有幫助的。

謝謝。

回答

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 

你在哪裏存儲contract_id在客戶表和碼錶。然後,你可以不喜歡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 

中間模型,您可以存儲特殊列中的代碼數量。當然,所有這些聲明都必須通過適當的遷移來支持:)我是否清理了一些東西?

+0

謝謝@socjopata ...是的,你確實爲我清理了一些東西,你的回答讓我意識到我需要做更多的研究才能更好地理解關係。我可以在創建代碼,合同和客戶端模型時創建這些遷移嗎?再次感謝, – thomasvermaak 2012-02-21 16:28:53

+0

是的,基本上你可以使用rails generator。當你鍵入「rails g model Code」時,它將創建一個合適的類,併爲它創建示例遷移。 – socjopata 2012-02-21 16:52:12