2013-12-16 46 views
0

我有三個表導軌的has_many,belongs_to的使用三個表

  • 成員
  • User_Groupings
  • 用戶

這是我正在試圖加入他們的行列。

User.id == Memberships.user_id 
User.user_type == User_Groupings.user_type 
Memberships.group_id == User_Groupings.group_id 

我想通過使用關聯如果可能的話做到這一點。

我不知道如何做一個屬於或有很多這是複雜的。

我的最終目標是能夠調用user_grouping.users並獲取與上述字段匹配的所有用戶。

回答

0
User.id == Memberships.user_id 

給出:

class Membership 
    belongs_to :user 
class User 
    has_many :memberships 

但其他兩個都沒有標準的Rails協會。

User.user_type == User_Groupings.user_type 

Memberships.group_id == User_Groupings.group_id 

你可能通過傳遞條件的關聯

模型中,這些也許你可以更新這些絲束的名字反映比較標準協會(或至少給我們一個更好的想法,你想要什麼)

User.user_grouping_id == User_Groupings.id 
Memberships.user_grouping_id == User_Groupings.id 

然後如果你想 「USER_TYPE」 你可以把它的方法如:

class User 
    def user_type 
    self.user_grouping.user_type 
    end 
+0

我的最終目標是能夠調用user_grouping.users並獲取與上述字段匹配的所有用戶。我可以修改user_groupings表,但其他人不容易改變。 – Brandon

+0

你能更具體地說明「所有符合上述領域的用戶」的含義嗎?也許提供一個用例/場景? –

0

我可能不太清楚你在做什麼,因此錯過了這一點。

看來你試圖做太多的user_groupings,因爲它有一個ID字段fir user_type和group_id。因此,我的第一個反應就是說你應該讓user_type和group_id在兩個不同的表中,或者讓它們作爲同一個字段(第二個選項似乎不太可能)

通過使用沒有標準外鍵belongs_to的:用戶:foreign_key =>:xxxxx_id

抱歉,這並不直接回答你的問題,但我覺得像你需要有另一種模式相關聯,你應該再看看你的數據庫設計

0

看起來會員和用戶。 然後你協會會是這樣的。

class User 
    belongs_to :user_grouping 
    has_many :user_memberships, :dependent => :destroy 
    has_many :memberships, :through => :user_memberships 
end 

And ..

class UserGrouping 
has_many :users, :dependent => :nullify 
end 

和..

class Membership 
has_many :user_memberships, :dependent => :destroy 
has_many :users, :through => :user_memberships  
end 

和..

class UserMembership 
    belongs_to :user 
    belongs_to :membership 
end 

當然,你必須放相應的外鍵的表。

希望這會幫助你。