2014-02-10 76 views
0

通用集團讓我們假設我有以下型號:導軌 - ActiveRecord的 - 查找基於共性

Group 
    has_many :users 

User 
    belongs_to :group 

而且我有以下表格:

User_id     Group 
    ------------------------------------- 
    1      Police 
    2      Fire 
    3      Military 
    4      Police 
    5      Police 
    1      Fire 

大多數用戶屬於一個組,但一些用戶,如user_id: 1屬於多個組。 (他屬於PoliceFire

我的問題是:如果我給出了兩個user_id's(比方說12),我將如何查詢找出這兩個用戶屬於(例如,在公共組以上的情況下,查詢將返回Fire

希望這是有道理

回答

0

所有我會建議使用用戶和組之間的關係has_and_belongs_to_many首先:。

class Group 
    has_and_belongs_to_many :users 
end 

class User 
    has_and_belongs_to_many :users 
end 

你必須像表:

create_table "groups", force: true do |t| 
    t.string name 
end 

create_table "users", force: true do |t| 
    ... 
end 

create_table "groups_users", id: false, force: true do |t| 
    t.integer "group_id" 
    t.integer "user_id" 
end 

這會防止你在組字段中組表目前正在進行的重複。它還有助於避免某些數據輸入錯誤(拼寫錯誤),並使構建更好的用戶界面變得更容易。還有其他方法可以克服這些相同的障礙,但是他們比通常不遵循約定要節省更多的努力。

然後你就可以得到羣體的交集兩個用戶(USER_A和USER_B),如:

user_a.groups & user_b.groups # => an array of the groups that they both belong to 

(user_a.groups & user_b.groups).collect(&:name) # => an array of the names of the groups they both belong to.