2011-09-22 13 views
28

मुझे एक रेल खोज क्वेरी से परिणाम प्राप्त होता है। मैं उस परिणाम को फिर से शुरू करना चाहता हूं और कुछ मानदंडों के आधार पर आगे के प्रसंस्करण के लिए इसे पास करने से पहले उस परिणाम से रिकॉर्ड्स ड्रॉप करता हूं। अतिरिक्त मानदंड डेटाबेस में रखे गए डेटा से बाहर हैं और इसलिए मैं उन्हें मूल 'ढूंढ' क्वेरी में शामिल नहीं कर सकता।Activerecord क्वेरी परिणामसेट से आइटम्स को कैसे निकालें?

नोट मैं डेटाबेस से किसी भी रिकॉर्ड को हटाना नहीं चाहता हूं बस उन्हें परिणाम से हटा दें।

कृपया कोई मुझे ऐसा करने के लिए कोड दे सकता है।

+0

क्या आप कभी भी जो खोज रहे थे उसे मिला? – Magnum

+0

इसे "बहुत व्यापक" या "ऑफ-साइट संसाधन के लिए अनुशंसा" के रूप में बंद किया जा सकता है। – halfer

उत्तर

6
set = MyObject.find(...) 
set = set.reject{|s| ... } 

या

set = set.select{|s| ... } 
+2

जब मैं ऐसा करता हूं तो 'सेट' को 'सरणी' में परिवर्तित किया जाता है? – Deekor

+0

'ढूंढ' केवल एक वस्तु देता है। शायद आप 'MyObject.all' या' MyObject.where' –

+0

@DylanVanderBerg चाहते हैं क्या आपको एहसास है कि यह प्रश्न RoR v1 या v2 के बारे में है? :) – fl00r

30

उपयोग reject रूप

Model.find_all_by_xxx().reject { |r| r.something? } 
+5

यह काम नहीं करेगा, क्योंकि 'find_by_xxx' एक रिकॉर्ड लौटाता है। आप 'find_all_by_xxx' चाहते हैं। –

+1

@RyanBigg ओह, आप सही हैं। जब उत्तर दिया गया, तो मैं एक डॉक्टर परियोजना पर काम कर रहा था, जिसमें 'find_by_xxx' संग्रह लौटाता है। संपादित। – Fabio

1

में आप delete_at भी उपयोग कर सकते हैं:

irb(main):005:0> c = Category.all 
Category Load (0.3ms) SELECT "categories".* FROM "categories" 
=> [#<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">] 
irb(main):006:0> c.delete_at(0) 
=> #<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53"> 
irb(main):007:0> c 
=> [] 
+4

यह डेटाबेस से प्रविष्टि को हटा देगा, है ना? – JustBasti

0

कुछ संसाधन अनुप्रयोग कोड है कि SQL से किया जाना चाहिए, तो कर सकते हैं नहीं, और परिणाम एक बदली हुई क्वेरी ऑब्जेक्ट होना चाहिए, id द्वारा ऑब्जेक्ट को दोबारा पूछना एक (बहुत मेमोरी अक्षम) विकल्प हो सकता है।

needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact 
new_collection = Model.where(id: needed_ids) 
संबंधित मुद्दे