PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Gửi mảng giá trị cho truy vấn sql trong ruby?

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 splitflatten vào hỗn hợp:

names = params.values_at(*fields)
              .select(&:present)
              .map(&:split)
              .flatten


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để trả về một phần tử từ string_to_array () trong PostgreSQL 8.4?

  2. Sử dụng bảng tạm thời để thay thế mệnh đề WHERE IN

  3. Chỉ mục bảng cho cột mảng Văn bản []

  4. Sắp xếp theo thứ tự không hoạt động trên các cột được tính toán nếu đặt hàng theo áp dụng trên nhiều cột

  5. Không thể tìm thấy điểm nhập có tên 'InterlockedIncrement' trong DLL 'kernel32.dll' - [email protected] 64 bit