2012-03-19 32 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