Tôi có ứng dụng Rails 5, với cơ sở dữ liệu PostgreSQL 9.6.Truy vấn nếu cột mảng chứa một hoặc nhiều giá trị
Ứng dụng này có Report
mô hình, với một lĩnh vực department_ids
mảng, được định nghĩa trong schema.rb
như:
t.integer "department_ids", default: [], array: true
tôi cần phải viết một truy vấn mà trả về dòng báo cáo nơi cột department_ids
chứa một hoặc nhiều hơn một tập hợp các bộ phận.
workaround hiện tại của tôi là để làm điều này trong Ruby với:
department_ids = [2, 5]
reports = Report.all.select do |report|
(report.department_ids & department_ids).any?
end
Tuy nhiên, sử dụng select
có nhược điểm của trả lại một Array
thay vì ActiveRecord::Relation
, có nghĩa là tôi cần phải làm ẩm kết quả lọc trở lại vào ActiveRecord::Relation
đối tượng .
Report.where(id: reports.map(&:id))
Tôi muốn tránh bước đó và xử lý tất cả trong một truy vấn.
Tôi làm cách nào để có thể viết truy vấn như thế này bằng Bản ghi đang hoạt động?
Tại sao bạn đã muốn với lĩnh vực như vậy? Có lẽ bạn cần phải xác định report_id trong bộ phận hoặc làm cho một hiệp hội nhiều đến nhiều? – AntonTkachov