我有一个组织模型(嵌套集)。我有一个人的模型。一个人可以有另一个人作为代理人。一个组织归一个人所有。组织仅对所有者或其代理人可见。
我想检索给定人可见的所有组织,即。由该人拥有或由该人拥有的所有组织,该人是其代表:
o = Arel::Table.new(:organisations)
p = Arel::Table.new(:people)
pd = p.where(p[:id].eq(3).or(p[:deputy_id].eq(3))).project(:id)
op = o.join(p).where(o[:person_id].in(pd)).project("distinct organisations.*)
可能有更好的方法来制定最后一个联接,但我想将人员及其代表的查询与人员及其代表可见的组织的查询分开。
最后一个连接返回一个 Arel::SelectManager (似乎没有任何有用的文档)。
有没有办法将 SelectManager 转换回 ActiveRecord::Relation 以从“组合下的闭包”的整个概念中受益?
如何再次自行加入上述关于组织的查询,以获取个人或其代理人可见的组织的所有后代?我知道 SQL,但总是无法使用 SelectManager 对组织进行自我加入。