PostgreSQL mendukung larik SQL standar dan standar any op (...)
sintaks:
Itu berarti Anda dapat membangun SQL seperti ini:
where name ilike any (array['%Richard%', '%Feynman%'])
Itu bagus dan ringkas jadi bagaimana kita membuat Rails membangun ini? Itu sebenarnya cukup mudah:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Tidak perlu mengutip manual, ActiveRecord akan mengonversi larik menjadi daftar yang dikutip/diloloskan dengan benar ketika mengisi ?
tempat penampung di.
Sekarang Anda hanya perlu membuat names
Himpunan. Sesuatu yang sederhana seperti ini harus dilakukan:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Anda juga dapat mengonversi 'a b'
single tunggal masukan ke 'a', 'b'
dengan melemparkan split
dan flatten
ke dalam campuran:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten