我一直在搜索谷歌和本網站的一些方法來爲我正在創建的應用程序構建一些模型。用戶和團隊建模
我計劃擁有用戶和團隊。用戶只能加入一個團隊和一個團隊。一個團隊顯然可以有很多用戶。另外,我想在分配給創建團隊的用戶的團隊中添加「領導者」角色,但稍後可以將其傳遞給已經是該團隊一部分的另一個用戶。
我見過的模型是這樣的一些例子,看到這樣幾個:
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來說,有一個完整的模型/表格似乎有點多。
感謝您的答覆和澄清。假設我確實希望允許一個用戶屬於許多團隊和一個團隊擁有許多用戶。爲什麼我需要有會員模式加入他們?我可以不在用戶模型中做'has_many:teams'嗎? – user1076802 2012-03-14 18:47:57
爲了支持多對多的關係,你需要一個連接/連接表。如果沒有這個聯結表,您需要爲用戶所屬的每個團隊在用戶上單獨列出一個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
啊,好吧,這是有道理的。所以,因爲我想要一個用戶一次只能屬於一個團隊,所以我不應該使用成員資格這樣的聯結表。我想在'User'模型或':has_one'中使用':belongs_to'嗎?看起來':has_one'更有意義,但在你的例子中你使用':belongs_to'。 – user1076802 2012-03-15 03:10:00