我試圖建立一個相當複雜的關係。正如您從下面的SQL中可以看出的那樣,我在這裏有三個(如果包含User的話)模型。成員,組和角色。處理複雜的ActiveRecord協會
用戶通過成員身份歸屬於團體,成員身份本身可以發揮作用。因此,用戶通過成員身份在組中扮演角色。
我想要做的是通過用戶在成員資格中具有的角色對特定組的成員資格進行排序。角色擁有與其相關的「排名」。因此,CEO = 3,部門主席= 2,經理= 1,工作人員= 0(例如)。使事情複雜化,一個角色可以從屬於另一個角色。因此,CEO可以成爲董事會的一部分,而部門主席和經理可以成爲高層管理人員(或其他)的一部分。
正如你可以從我下面的SQL看到的,我已經得到它的工作,我只需要弄清楚如何將它變成一個ActiveRecord協會,以便當我找到一個組時,我可以說group.memberships和應按照角色排序。
SELECT `memberships`.* from `memberships`
INNER JOIN `groups` ON `groups`.id = `memberships`.group_id
INNER JOIN `roles` ON `memberships`.role_id = `roles`.id
INNER JOIN `roles` `role_cat` ON `role_cat`.id = `roles`.type_id
WHERE `groups`.id = "HHC" AND `memberships`.expiration > CURDATE()
ORDER BY `role_cat`.rank DESC, `roles`.rank DESC
乾杯!