7

मेरे पास एक पोस्टग्रेएसक्यूएल 9.6 डेटाबेस के साथ एक रेल 5 अनुप्रयोग है।क्वेरी यदि सरणी कॉलम में एक या अधिक मान हैं

आवेदन है Report मॉडल, एक department_ids सरणी क्षेत्र है, जो के रूप में schema.rb में परिभाषित किया गया है के साथ:

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

मैं एक प्रश्न जो रिपोर्ट पंक्तियों जहां department_ids स्तंभ एक या एक से अधिक शामिल रिटर्न लिखने की ज़रूरत विभाग_आईड्स का दिया गया सेट।

मेरे वर्तमान वैकल्पिक हल के साथ रूबी में यह करने के लिए है:

department_ids = [2, 5] 

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

हालांकि, select का उपयोग कर ActiveRecord::Relation के बजाय एक Array लौटने का नकारात्मक पक्ष यह है, जिसका अर्थ है मैं फ़िल्टर किए गए परिणाम ActiveRecord::Relation वस्तुओं में वापस हाइड्रेट करने की जरूरत है ।

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

मैं उस चरण से बचना चाहता हूं, और इसे एक ही प्रश्न में संभालना चाहता हूं।

मैं सक्रिय रिकॉर्ड के साथ इस तरह की क्वेरी कैसे लिख सकता हूं?

+1

क्यों आप इस तरह के क्षेत्र के साथ चाहते है? हो सकता है कि आपको विभाग में report_id को परिभाषित करने की ज़रूरत है या कई लोगों को एसोसिएशन बनाना है? – AntonTkachov

उत्तर

5

कुछ इस तरह काम करना चाहिए:

Report.where('department_ids @> ARRAY[?]::integer[]', [2, 5]) 
संबंधित मुद्दे