7

Bir PostgreSQL 9.6 veritabanıyla bir Rails 5 uygulamasına sahibim.Dizi sütunu bir veya daha fazla değer içeriyorsa sorgula

uygulama olduğu gibi schema.rb ile tanımlanmış olan bir department_ids dizi alanı ile Report modeli:

t.integer "department_ids", default: [], array: true 

I department_ids kolon bir veya daha fazlasını içeren bir rapor satır döndüren bir sorgu yazmak gerekir verilen bölüm_dizimleri.

Benim şu anki geçici çözüm Ruby bu yapmaktır: select kullanarak Ancak

department_ids = [2, 5] 

reports = Report.all.select do |report| 
    (report.department_ids & department_ids).any? 
end 

ben ActiveRecord::Relation nesneleri geri filtrelenmiş sonuçları hidrat gerektiği anlamına gelmektedir yerine ActiveRecord::Relation bir Array döndürme olumsuz sahiptir .

Report.where(id: reports.map(&:id)) 

Bu adımdan kaçınmak ve bunların tümünü tek bir sorguda ele almak istiyorum.

Böyle bir sorguyu Active Record ile nasıl yazabilirim? Böyle

+1

böyle alanıyla istiyorum var ki? Belki departmandaki report_id'yi tanımlamanız veya bir çok kişiye bir dernek kurmanız gerekir? – AntonTkachov

cevap

5

şey çalışmalıdır:

Report.where('department_ids @> ARRAY[?]::integer[]', [2, 5]) 
İlgili konular