К сожалению, он не поддерживается изначально, поэтому нам нужно взломать здесь.
И хак выглядит так, что довольно неэффективный SQL (надеюсь, администраторы базы данных не смотрят на это :-)):
admins = User.where(:kind => :admin)
authors = User.where(:kind => :author)
both = User.where("users.id in (#{admins.select(:id)}) OR users.id in (#{authors.select(:id)})")
both.to_sql # => where users.id in (select id from...) OR users.id in (select id from)
Создает подселеты.
И немного лучший взлом (с точки зрения SQL) выглядит так:
admins_sql = admins.arel.where_sql.sub(/^WHERE/i,'')
authors_sql = authors.arel.where_sql.sub(/^WHERE/i,'')
both = User.where("(#{admins_sql}) OR (#{authors_sql})")
both.to_sql # => where <admins where conditions> OR <authors where conditions>
Это создает правильное условие ИЛИ, но, очевидно, оно учитывает только ГДЕ часть областей.
Я выбрал 1-й, пока не посмотрю, как он работает.
В любом случае, вы должны быть очень осторожны с этим и наблюдать за генерируемым SQL.