2012-03-19 54 views
4

我正在构建一个Rails应用程序来跟踪组成员之间的开销/债务,比如说一个家庭。到目前为止,我有团队,用户和费用模型 - 基础知识。现在我试图找出组和用户之间的关联。例如,一个组可以有许多用户,并且一个用户可以拥有/属于多个组,所以我使用一个连接表来设置HABTM关联。但我很困惑,因为一个集团也可以有一个所有者,也是一个用户。这就是我现在:Rails - 对同一模型的多个关联

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_one :owner, :class_name => "User" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups 
end 

有目前在集团表中的owner_id场,但我发现了一个PostgreSQL错误column users.group_id does not exist当我尝试做任何事情涉及group.owner。我相当迷茫 - 在这里最好的方式来表示多个关联到同一模型的任何想法?

+0

'HABTM'已经意味着该组有许多用户,对吧?所以这些用户中的一个也必须是“所有者”。你可以做的就是使用'has_many:through',并用一个字段来指定组的所有者。 – Zabba 2012-03-19 21:59:05

回答

12

所以我觉得我跟着你所想要知道的,这是迪亚创建了一个快速ERD:

simple erd

它看起来像你只需要添加一个与所有权的直接关联用户和组。我使用了列owner_id,所以表和模型更清晰,避免了多个user_id列的混淆。然后下列型号将工作:

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    belongs_to :owner, :class_name => "User", :foreign_key => "owner_id" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups 
    has_many :owned, :class_name => "Group", :foreign_key => "owner_id" 
end 
+0

我没有注意到在我的代码中'用户'的双属性'groups',加上你。 – 2012-03-19 22:21:08

+0

成功!看起来我在我的Group模型中切换了'has_one-/belongs_to-'所有者关联,而拥有的解决方案是完美的。也爱图。谢谢! – ark 2012-03-19 22:23:56

+1

用图表......这家伙是谁?做得好。 – 2012-10-16 20:56:12

1

什么:

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users, :through => :membership 
    has_one :owner, :class_name => "User" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups, :through => :membership 
    has_many :owned, :class_name => "Group" 
end 

,并创建user_idgroup_id模型Membership