避免DB中的重复数据(与Rails一起使用)

时间:2010-03-04 10:00:58

标签: ruby-on-rails database-design duplicate-data

我有五张桌子,我试图在一起很好地工作,但可能需要一些帮助。

我有三个主要表格:

  • 帐户
  • 成员
  • 和角色。

有两个连接表

  • 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

2 个答案:

答案 0 :(得分:1)

如果我正确读到这个,你有:

帐户habtm成员

成员habtm帐户

成员has_many角色

如果这是准确的,您只需要帐户和成员之间的连接表,然后只需要成员和角色之间的常规FK。 @ account.members和@ account.members.roles都可以让你访问你需要的属性,@ account.save可以毫不费力地保存整个混乱。

我不确定是什么迫使您拥有该account_members_roles表。如果Rails能够解决这个问题,我不会这样做。我知道我肯定不能。 :)

答案 1 :(得分:0)

在这里阅读: http://blog.hasmanythrough.com/2006/4/17/join-models-not-proxy-collections

  一个简单的主要区别   has_and_belongs_to_many连接表和   一个has_many:通过连接模型就是那个   连接模型可以具有属性   除了外键之外   记录它正在加入。事实上,如果你   你没有那些其他属性   可能不会使用连接模型和   会选择加入表。

所以你似乎想要使用has_many:through,你就会被设置。