警告:Total Rails Newb(TRN)。這應該是一個非常基本的問題,所以我希望有人可以騰出幾分鐘來幫助解決一些問題。Has_many,通過關聯
比方說,我有以下型號:用戶,組和成員 一個用戶可以有許多組(比如說朋友,家人等) 一個組可以有很多成員,即其他用戶。
我該如何構造它?
起初我嘗試這樣:
class User < ActiveRecord::Base
has_many :groups
has_many :groups, :through => :members
end
class Groups < ActiveRecord::Base
has_many :users, :through => :members
belongs_to :user
end
class Member < ActiveRecord::Base
belongs_to :group
belongs_to :user
end
然而,這給了我一個錯誤的用戶,所以我改變
has_many :groups, :through => :members
到
has_many :memberships, :through => :members, :source => :groups
仍然得到關於失蹤關聯時出錯我試着做
group = Group.new
group.user.new
爲什麼當您調用'user.groups'時,它是否會在返回的數組中多次顯示該組?例如,如果一個組中有2個成員並且調用了'user.groups',那麼該組將在數組中顯示兩次,因爲它與2個成員關聯。 – iwasrobbed 2011-03-24 02:23:41
因爲這是自然行爲。它不會返回uniq組,而是與成員一樣多的所有關聯組。您始終可以調用'user.groups.uniq'或通過'DISTINCT' sql來爲用戶返回uniq組。但實際上你所談論的問題實際上與驗證有關。您應該驗證您創建的數據的唯一性。 – fl00r 2011-03-24 09:18:13
那麼,它不會在數據庫中創建多個「組#2」,因此所有的組ID在數據庫中都是唯一的,它不應該是驗證的事情。自從它與成員關聯以來,它只是多次返回獨特的組。所以你可能正確地使用'user.groups.uniq'來返回一個唯一的集合。感謝您解釋 – iwasrobbed 2011-03-24 13:04:27