द्वारा ActiveRecord ऑर्डर मेरे पास कुछ बाहरी स्टोरेज (रेल कैश या रेडिस) में संग्रहीत आईडी की एक सरणी है। नियंत्रक की कार्रवाई में मैं यहबाहरी सरणी
ids = [5, 1, 17, 84] # really fetched from external source
result = MyModel.where(:id => ids)
उपयोग करते हुए, यानी इस डेटा का चयन करें और वस्तु लाने मैं भी चाहता हूँ यह array_of आईडी में आईडी के रूप में सिर्फ एक ही आदेश दिया जा करने के लिए:
ids == result.map(&:id) # => true
वैकल्पिक हल मैं द्वारा छँटाई उपयोग के रूप में mysql क्षेत्र समारोह:
MyModel.where(:id => ids).order("FIELD(id, #{ids.join ', '})")
लेकिन मैं इस दृष्टिकोण पसंद नहीं है के रूप में यह mysql विशिष्ट है और बड़ा ids
सरणी के मामले में बहुत लंबे प्रश्नों पैदा करता है। क्या बेहतर है, डीबी-अज्ञेयवादी तरीके से ऐसा करने के लिए? डीबी से अपरिवर्तित डेटा प्राप्त करना और रूबी पक्ष पर सॉर्ट करना अवांछनीय है क्योंकि यह संसाधन-महंगा और पेजिनेशन के साथ उपयोग करना मुश्किल है।
धन्यवाद।
की संभावित डुप्लिकेट [ActiveRecord.find (सरणी \ _OF \ _ids), संरक्षण आदेश] (https: // stackoverflow। कॉम/प्रश्न/1680627/activerecord-findarray-of-ids-preserving-order) – MatayoshiMariano