Tak więc odpowiedź na pierwotne pytanie, czy możesz połączyć zakresy za pomocą 'lub' zamiast 'i' wydaje się brzmieć „nie, nie możesz”. Możesz jednak ręcznie zakodować zupełnie inny zakres lub zapytanie, które wykona zadanie, lub użyć innego frameworka niż ActiveRecord, np. MetaWhere lub Squeel. Nie przydatne w moim przypadku
Ja 'or'ing zakres wygenerowany przez pg_search, który robi trochę więcej niż select, zawiera porządek przez ASC, co powoduje bałagan w czystej unii. Chcę 'lub' z ręcznie wykonanym teleskopem, który robi rzeczy, których nie mogę zrobić w pg_search. Więc musiałem to zrobić w ten sposób.
Product.find_by_sql("(#{Product.code_starts_with('Tom').to_sql}) union (#{Product.name_starts_with('Tom').to_sql})")
To znaczy zamień zakresy na sql, umieść nawiasy wokół każdego z nich, połącz je razem, a następnie znajdź_by_sql za pomocą wygenerowanego sql. To trochę bzdury, ale działa.
Nie, nie mów mi, że mogę użyć „against: [: name,: code]” w pg_search, chciałbym to zrobić w ten sposób, ale pole „name” to hstore, którego pg_search nie może obsłużyć jeszcze. Dlatego zakres według nazwy musi zostać utworzony ręcznie, a następnie połączony z zakresem pg_search.