2010-03-04 143 views
2

我有五張表,我試圖很好地一起工作,但可能需要一些幫助。避免數據庫中的重複數據(用於Rails)

我有三個主要的表:

  • 成員
  • 和角色。

有兩個連接表

  • account_members
  • 和account_member_roles。

構件表由account_members(FK ACCOUNT_ID和member_id)表接合。

其他2個表是問題(角色account_member_roles)。

帳戶的成員可以有多個角色和我有account_member_roles(FK account_member_id和ROLE_ID)表加入account_members連接表和角色表。

這似乎是合乎邏輯的,但是你可以與連接表有關係嗎?我希望能夠做的是在創建一個帳戶時,例如,我想@ account.save包括角色並更新account_member_roles表格整潔地.....但通過account_members連接表。

我已經試過.....

accept_nested_attributes_for :members, :account_member_roles 

在account.rb但我得到.....

ActiveRecord::HasManyThroughCantAssociateThroughHasManyReflection (Cannot modify association 'Account#account_member_roles' because the source reflection class 'AccountMemberRole' is associated to 'AccountMember' via :has_many.) 

在試圖保存記錄。

有關我該如何處理這個問題的任何建議?

CIA

-ants

+0

你已經描述了你是如何解決問題的,但是你沒有描述你試圖解決的問題。 @Sleepycat(下面)描述了一個問題。那是你正在試圖解決的問題嗎? – 2010-04-02 13:25:00

回答

0

採取這裏閱讀: http://blog.hasmanythrough.com/2006/4/17/join-models-not-proxy-collections

簡單 has_and_belongs_to_many之間的主要區別連接表和 一個的has_many:通過加盟模式是 的加入模型可以具有屬性 ,而不是其加入的 記錄的外鍵。實際上,如果您的 沒有其他屬性,那麼您的 可能不會使用連接模型,而 將解決連接表。

所以,你似乎想要使用has_many:through,你會被設置。

+0

我正在使用has_many:thorugh。也許問題在於在創建join * model * account_member_roles之前尚未創建join * model * account_members的主鍵。這似乎是我真正的問題,我可以加入與彼此相關的模型嗎? – ants 2010-03-05 10:12:34

+0

我不明白爲什麼不能,只要你能處理複雜性:) – Trevoke 2010-03-05 13:42:42

1

如果我正確地讀這一點,你必須:

賬戶的habtm成員

成員的habtm佔

成員HAS_MANY角色

如果這是正確的,你只需要賬戶之間的連接表和成員,然後只是成員和角色之間的常規FK。 @ account.members和@ account.members.roles都會讓你訪問你需要的屬性,@ account.save應該保存整個混亂而不用大驚小怪。

我不確定是什麼強迫你擁有該account_members_roles表。如果Rails能夠處理這個問題,我不會。我知道我當然不能。 :)

+0

我第二個這個解決方案,如果Sleepycat描述了正確的問題。 – 2010-04-02 13:23:30