2012-03-14 80 views
0

我一直在搜索谷歌和本網站的一些方法來爲我正在創建的應用程序構建一些模型。用戶和團隊建模

我計劃擁有用戶和團隊。用戶只能加入一個團隊和一個團隊。一個團隊顯然可以有很多用戶。另外,我想在分配給創建團隊的用戶的團隊中添加「領導者」角色,但稍後可以將其傳遞給已經是該團隊一部分的另一個用戶。

我見過的模型是這樣的一些例子,看到這樣幾個:

class User < ActiveRecord::Base 
    has_one :team 
    has_many :memberships 
end 

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :team 
end 

class Team < ActiveRecord::Base 
    has_many :memberships 
    has_many :users, :through => :memberships 
end 

爲什麼是會員制模式有必要嗎?我已經在幾個例子中看到了它,我不確定我是否遵循了爲什麼它在那裏以及它在做什麼的邏輯。另外,如果我在團隊模型中做了類似has_one :leader的事情,並且擁有領導者模型,那麼這將被視爲確定團隊領導者的最佳做法嗎?對於Leader來說,有一個完整的模型/表格似乎有點多。

回答

2

成員資格模型允許在那裏建立多對多的關係。它充當連接表。它將允許用戶屬於許多團隊和團隊擁有許多用戶。

聽起來你只是想要一對多呢?

class User < ActiveRecord::Base 
    belongs_to :team 
end 

class Team < ActiveRecord::Base 
    has_many :users 
end 

我得仔細檢查這一部分,但你可以使用額外的參數來指定您ASSOCATION模型,如果他們不與你所需要的名字相匹配。所以Team可以有一個只是用戶模型的領導者。

class Team < ActiveRecord::Base 
    has_many :users 
    has_one :leader, :class_name => "User", :foreign_key => "user_id" 
end 

鐵軌指南頁面上的關聯有一個很好的總結,包括對部分:CLASS_NAME和其他選項 http://guides.rubyonrails.org/association_basics.html#the-has_many-association

+0

感謝您的答覆和澄清。假設我確實希望允許一個用戶屬於許多團隊和一個團隊擁有許多用戶。爲什麼我需要有會員模式加入他們?我可以不在用戶模型中做'has_many:teams'嗎? – user1076802 2012-03-14 18:47:57

+0

爲了支持多對多的關係,你需要一個連接/連接表。如果沒有這個聯結表,您需要爲用戶所屬的每個團隊在用戶上單獨列出一個team_id列。聯結表讓您可以在關係的用戶和團隊方面進行一對多的交流。這個維基百科鏈接很簡短,但描述了基本思想http://en.wikipedia.org/wiki/Many-to-many_%28data_model%29在Rails中,另一種方法是從兩側進行has_and_belongs_to_many,然後生成一個連接表這只是2 cols team_id,user_id沒有id列,這個表不是一個模型 – xkickflip 2012-03-14 21:39:54

+0

啊,好吧,這是有道理的。所以,因爲我想要一個用戶一次只能屬於一個團隊,所以我不應該使用成員資格這樣的聯結表。我想在'User'模型或':has_one'中使用':belongs_to'嗎?看起來':has_one'更有意義,但在你的例子中你使用':belongs_to'。 – user1076802 2012-03-15 03:10:00