我正在尝试建立一个相当复杂的关系。从下面的 SQL 中可以看出,我在这里使用了三个(如果包括 User,则为四个)模型。成员、组和角色。
用户通过成员资格属于组,成员资格本身可以具有角色。因此,用户通过成员资格在组中具有角色。
我想要做的是通过用户在成员资格中的角色来订购特定组的成员资格。角色有一个与之相关的“等级”。因此,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
干杯!