Я действительно был удивлен, используя Arel для создания одного составного SQL-запроса, когда обнаружил, что вещи Arel не могут быть связаны.
После долгих поисков я нашел единственное решение. Он использует пользовательский метод «отражать», и идея состоит в том, чтобы рекурсивно создавать экземпляры новых классов строителя. Неважно.
Например, как меня пытались:
e = Arel::Table.new(:events)
a = e.where(e[:id].eq(1))
if (smth) { a.where(e[:name].eq('joe')) } # not works
Невозможно связать это как-то вместе. Мои планы рассыпались вдребезги.. Ладно, уже реализую вручную.
Однако это не очень хорошая идея, потому что я должен предотвратить любые ловушки sql-инъекций и т. Д.