Die Antwort auf die ursprüngliche Frage: Können Sie Bereiche mit 'oder' anstelle von 'verbinden und' scheint 'nein, Sie können nicht' zu sein. Sie können jedoch einen völlig anderen Bereich oder eine andere Abfrage codieren, die den Job ausführt, oder ein anderes Framework als ActiveRecord verwenden, z. B. MetaWhere oder Squeel. In meinem Fall nicht nützlich
Ich verwende einen von pg_search generierten Bereich, der etwas mehr als nur auswählen kann. Er enthält die Reihenfolge von ASC, wodurch eine saubere Union durcheinander gebracht wird. Ich möchte es mit einem handgefertigten Bereich 'oder' machen, der Dinge tut, die ich in pg_search nicht tun kann. Also musste ich es so machen.
Product.find_by_sql("(#{Product.code_starts_with('Tom').to_sql}) union (#{Product.name_starts_with('Tom').to_sql})")
Dh die Bereiche in SQL umwandeln, Klammern um jeden setzen, sie zusammenfügen und dann find_by_sql mit dem generierten SQL finden. Es ist ein bisschen Müll, aber es funktioniert.
Nein, sag mir nicht, dass ich "gegen: [: name ,: code]" in pg_search verwenden kann. Ich würde es gerne so machen, aber das Feld 'name' ist ein Hstore, den pg_search nicht verarbeiten kann noch. Daher muss der Gültigkeitsbereich nach Namen handgefertigt und dann mit dem Gültigkeitsbereich pg_search verknüpft werden.