相关表有别名时如何按关系排序
Posted
技术标签:
【中文标题】相关表有别名时如何按关系排序【英文标题】:How to order by relationship when the related table has an alias 【发布时间】:2021-12-25 03:15:05 【问题描述】:我们有一个名为Client
的表,客户端以两种方式属于用户,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
放入包含中,则会引发用户不在桌面上的错误。
Association named 'user' was not found on Client;
这是我在网上找到的最接近的。
【问题讨论】:
current_company.clients.includes(:creator).order("users.name #sort_dir")
工作吗?
是的,看来确实如此,如果你做出这个答案,我很乐意接受它来给你荣誉,因为你为我节省了大量时间。
【参考方案1】:
查看查询的最简单方法是调用.to_sql
。
您会看到,在执行join
时,它使用表名users
,而不是关系名creator
。
这应该可行:
current_company.clients.includes(:creator).order("users.name #sort_dir")
【讨论】:
感谢您的解释,我相信我会在某个时候回来讨论这个问题。再次感谢 不客气!以上是关于相关表有别名时如何按关系排序的主要内容,如果未能解决你的问题,请参考以下文章
Sonata Admin Bundle:按计数一对多关系排序