組織のモデル(ネストされたセット)があります。私は人々のモデルを持っています。人は別の人を代理人にすることができます。組織は個人によって所有されます。組織は、所有者またはその代理人にのみ表示されます。
特定の人が表示できるすべての組織を取得したいと思います。その人が所有する、または特定の人が代理人である人が所有するすべての組織:
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 で組織の自己結合に失敗します。