Portanto, a resposta para a pergunta original, você pode associar escopos com 'ou' em vez de 'e' parece ser "não, não pode". Mas você pode codificar manualmente um escopo ou consulta completamente diferente que faça o trabalho ou usar uma estrutura diferente do ActiveRecord, por exemplo, MetaWhere ou Squeel. Não é útil no meu caso
Estou 'ou' criando um escopo gerado pelo pg_search, que faz um pouco mais do que o select, ele inclui order by ASC, o que torna uma bagunça uma união limpa. Eu quero 'ou' com um escopo artesanal que faz coisas que não posso fazer no pg_search. Então eu tive que fazer assim.
Product.find_by_sql("(#{Product.code_starts_with('Tom').to_sql}) union (#{Product.name_starts_with('Tom').to_sql})")
Ou seja, transforme os escopos em sql, coloque colchetes em torno de cada um, junte-os e depois encontre_by_sql usando o sql gerado. É um pouco ruim, mas funciona.
Não, não me diga que posso usar "against: [: name,: code]" em pg_search, gostaria de fazer assim, mas o campo 'name' é um hstore, que o pg_search não pode manipular ainda. Portanto, o escopo pelo nome deve ser criado à mão e depois associado ao escopo pg_search.