Таким образом, ответ на первоначальный вопрос, можете ли вы присоединиться к областям действия с «или» вместо «и», кажется, «нет, вы не можете». Но вы можете передать код совершенно другой области или запрос, который выполняет эту работу, или использовать другую среду, отличную от ActiveRecord, например. MetaWhere или Squeel. Не полезно в моем случае
Я 'или' область видимости, сгенерированная pg_search, которая делает немного больше, чем select, она включает в себя порядок ASC, что создает беспорядок чистого объединения. Я хочу «или» это с ручной областью, которая делает вещи, которые я не могу сделать в pg_search. Поэтому я должен был сделать это так.
Product.find_by_sql("(#{Product.code_starts_with('Tom').to_sql}) union (#{Product.name_starts_with('Tom').to_sql})")
т.е. превратить области видимости в sql, заключить их в квадратные скобки, объединить их вместе и затем find_by_sql, используя сгенерированный sql. Это немного мусора, но это работает.
Нет, не говорите мне, что я могу использовать "против: [: name,: code]" в pg_search, я бы хотел сделать это так, но поле 'name' - это hstore, которое может pg_search не справиться пока. Таким образом, область действия по имени должна быть создана вручную, а затем объединена с областью действия pg_search.