PostgreSQL hỗ trợ mảng SQL tiêu chuẩn và any op (...)
cú pháp:
Điều đó có nghĩa là bạn có thể xây dựng SQL như thế này:
where name ilike any (array['%Richard%', '%Feynman%'])
Điều đó thật hay và ngắn gọn, vậy làm cách nào để chúng ta có được Rails để xây dựng cái này? Điều đó thực sự khá dễ dàng:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Không cần trích dẫn thủ công, ActiveRecord sẽ chuyển đổi mảng thành danh sách được trích dẫn / thoát đúng khi nó điền vào ?
trình giữ chỗ trong.
Bây giờ bạn chỉ cần tạo names
mảng. Một cái gì đó đơn giản như thế này nên làm:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Bạn cũng có thể chuyển đổi một 'a b'
nhập vào 'a', 'b'
bằng cách tung split
và flatten
vào hỗn hợp:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten