Ich habe eine Rails 5-Anwendung mit einer PostgreSQL 9.6-Datenbank.Abfrage, ob Array-Spalte einen oder mehrere Werte enthält
Die Anwendung hat Report
-Modell, mit einem department_ids
Array-Feld, das in schema.rb
definiert ist als:
t.integer "department_ids", default: [], array: true
Ich muss schreiben, um eine Abfrage, die Bericht Zeilen zurückgibt, wo die department_ids
Spalte eine oder mehrere einer enthält gegebene Menge von department_ids.
Meine aktuelle Problemumgehung ist dies mit in Ruby zu tun:
department_ids = [2, 5]
reports = Report.all.select do |report|
(report.department_ids & department_ids).any?
end
jedoch select
verwendet, hat die Kehrseite der einen Array
statt ActiveRecord::Relation
Rückkehr, was bedeutet, ich brauche die gefilterten Ergebnisse zurück in ActiveRecord::Relation
Objekte Hydrat .
Report.where(id: reports.map(&:id))
Ich möchte diesen Schritt vermeiden, und alles in einer einzigen Abfrage behandeln.
Wie kann ich Abfrage wie diese mit Active Record schreiben?
Warum Sie mit einem solchen Feld wollen haben? Vielleicht müssen Sie report_id in der Abteilung definieren oder eine Verknüpfung zu vielen vornehmen? – AntonTkachov