所以我有一张users
表和一张departments
表。这些是通过另一个表department_users
加入的。
我正在显示针对部门的用户网格,如果用户在某个部门,则会勾选。这是通过检查用户是否在department_users
表中具有将其加入部门的条目来完成的。
我现在想要对记录进行排序,以便所有在A部门的人都在顶部,即网格的第一列是顶部的所有刻度,然后是底部的所有十字。
我熟悉数据库列的值的排序,但我不确定如何通过为用户存在的连接记录来订购。
编辑:
用户和部门之间的关系是多对多的。
我真正想要的是
User.all ORDER BY (user.departments.includes? 'Department A')
因此,如果用户在部门A中,那么它就在所有其他人之前。
这可能吗?
答案 0 :(得分:0)
使用此命令根据部门订购用户:
User.joins(:departments).order("department_users.department_id")
这将生成查询:
SELECT `users`.* FROM `users` INNER JOIN `department_users` ON `department_users`.`department_id` = `users`.`id` INNER JOIN `departments` ON `departments`.`id` = `department_users`.`department_id` ORDER BY department_users.department_id
这将根据部门订购用户。请相应地更正关联名称/表名称。他们可能是错的。
编辑:
根据你的情况,你可以这样做:
User.joins(:departments).order("FIELD(department_users.department_id, field_names)")
例如:
User.joins(:departments).order("FIELD(department_users.department_id, 'Department A', 'Department B')")
但请记住提及所有部门名称不要错过任何部门名称,否则它将无法正常工作。
希望这有帮助。