遇到一个我之前没遇到的问题,似乎无法在任何地方找到一个令人沮丧的解决方案。基本上我有一个包含invited_by_id
列的用户表,引用相同的用户表。
我现在正在尝试创建一个查询,根据邀请的用户名对结果进行排序,但是在这里使用通常的活动记录排序并不真正起作用
User
.includes(:invited_by)
.order("users.name ASC")
因为这两个表都是相同的,所以看起来rails选择第一个,而不是invite_by关联。
有没有办法指定我想在协会上订购?
更多信息
我试图在活动记录mixin中使用它,所以我不会直接在基类上调用它,并且它需要使用现有作用域,因为将在作用域上调用混合方法。例如
User
.includes(:invited_by)
.where(where_clause)
.sort(:invited_by_name, :asc)
这里,mixin提供了sort
方法,这是它需要能够区分表格的地方。我有逻辑意味着它知道关系是什么,所以它知道:invited_by_name
是:invite_by关系的名称列,但这就是我所拥有的。
答案 0 :(得分:0)
您需要使用不同的名称引用同一个表。您可以使用Arel
执行此操作guest = Arel::Table.new(:users, :as => 'guest')
inviter = Arel::Table.new(:users, :as => 'inviter')
relation = guest.
project(Arel.sql('*')).
join(inviter).on(guest[:invited_by_id].eq(inviter[:id])).
order(inviter[:name])
@users = relation.to_sql