当相关 table 有别名时如何按关系排序

How to order by relationship when the related table has an alias

我们有一个名为 Client 的 table 并且客户端以两种方式属于一个用户,一个 client 可以有一个 updater 并且有一个 creator.也属于一个company.

belongs_to :creator, class_name: 'User'
belongs_to :updater, class_name: 'User' 

我正在尝试为他们所属的当前父对象 company 获取所有客户端,然后按他们的 creator

名称的字母顺序对它们进行排序

这是我目前尝试过的方法

current_company.clients.includes(:creator).order("creator.name #{sort_dir}")

如果我将 :user 放入 include 中,它会抛出用户不在 table 上的错误。

Association named 'user' was not found on Client; 

这是我在网上找到的最接近的结果。

查看查询的最简单方法是调用 .to_sql.

您将看到,当执行 join 时,它使用 table 名称 users,而不是关系名称 creator

这应该有效:

current_company.clients.includes(:creator).order("users.name #{sort_dir}")