Jadi, jawaban untuk pertanyaan awal, dapatkah Anda menggabungkan cakupan dengan 'atau' bukannya 'dan' tampaknya "tidak, Anda tidak bisa". Tetapi Anda dapat memberikan kode pada lingkup atau kueri yang sama sekali berbeda yang melakukan pekerjaan itu, atau menggunakan kerangka kerja yang berbeda dari ActiveRecord misalnya MetaWhere atau Squeel. Tidak berguna dalam kasus saya
I'm 'or'ing a scope generated by pg_search, yang melakukan lebih dari sekadar memilih, itu termasuk pesanan oleh ASC, yang membuat kekacauan dari persatuan yang bersih. Saya ingin 'atau' dengan cakupan buatan tangan yang melakukan hal-hal yang tidak dapat saya lakukan di pg_search. Jadi saya harus melakukannya seperti ini.
Product.find_by_sql("(#{Product.code_starts_with('Tom').to_sql}) union (#{Product.name_starts_with('Tom').to_sql})")
Yaitu mengubah cakupan menjadi sql, menempatkan tanda kurung di sekitar masing-masing, menggabungkannya bersama-sama dan kemudian find_by_sql menggunakan sql yang dihasilkan. Agak sampah, tapi berhasil.
Tidak, jangan beri tahu saya bahwa saya dapat menggunakan "against: [: name,: code]" di pg_search, saya ingin melakukannya seperti itu, tetapi kolom 'name' adalah hstore, yang tidak dapat ditangani pg_search namun. Jadi ruang lingkup berdasarkan nama harus dibuat dengan tangan dan kemudian digabungkan dengan ruang lingkup pg_search.