У меня есть модель для организаций (вложенный набор). У меня есть модель для людей. Человек может иметь другого человека в качестве заместителя. Организация принадлежит человеку. Организация видна только обладателю или его заместителю.
Я хотел бы получить все видимые для данного лица организации, т.е. все организации, принадлежащие этому лицу или принадлежащие людям, для которых данное лицо является заместителем:
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 для самостоятельного объединения в организации.