2012-04-21 13 views
39

से केवल कुछ कॉलम का चयन करें एसक्यूएल क्वेरी को डेटाबेस से कुछ कॉलम चुनने के लिए रेलवे में किस तरह का तरीका है, मेरे पास कुछ बड़े डेटा फ़ील्ड हैं जिन्हें मैं लगातार आवधिक AJAX कॉल से लोड करना चाहता हूं । अनावश्यक रूप से पढ़ना संसाधन उपभोग करने वाला और धीमा है।रूबी रेल - डेटा बेस

@itemlist = Item.find(:all, :conditions => { .... }) #this select all columns 

मैं के लिए SELECT name, address FROM users;SELECT * FROM users; के बजाय

+2

आमतौर पर अगर आप/जरूरत नहीं है अन्य स्तंभों का उपयोग, आप डेटा सामान्यीकरण बारे में सोचना चाहिए। –

उत्तर

93

रेल 3:

Item.select("name, address").where(....)

+0

हाँ, महान एक! इस एक को बढ़ावा दें, दोस्तों, क्योंकि रेल 3 दूसरे –

+2

की तुलना में कहीं अधिक लोकप्रिय है, ध्यान दें, यदि आपके 'SELECT' कथन में एक से अधिक तालिकाएं हैं और आप एक कॉलम का संदर्भ दे रहे हैं जो 1 से अधिक तालिका में मौजूद हो सकता है , चयन में तालिका शामिल करें, जैसे 'select ("items.name, users.address") '। –

+0

काम नहीं कर रहा है, जबकि मैं टेबल में शामिल हूं – Chinmay235

2

इस प्रयास करें देख रहा हूँ:

@itemlist = Item.find(:all, :select => "name, address", :conditions => { .... }) 
21

मेक :select निर्माण का उपयोग। रेल के पिछले संस्करण के लिए

@itemlist = Item.select('name, address', conditions: { .... }) 

: इस प्रयास करें

@itemlist = Item.find(:all,:select => 'name, address', :conditions => { .... }) 
+4

यह अब सही नहीं है और रेल 4 में समर्थित नहीं है। उत्तर को अद्यतन करने की आवश्यकता है। – superluminary

+1

उत्तर को प्रतिबिंबित करने के लिए सुपरल्यूमिनरी की टिप्पणी के बाद उत्तर अपडेट किया गया है। सिलेक्ट सिंटैक्स। मदद के लिए –

8

अरेल का उपयोग करना (उर्फ रेल 3 में), उपयोग:

Item.where(...).select("name, address") 

इसके अलावा, ऐसा लगता है .Select अगर नजरअंदाज कर दिया जाता है आप एक ऐसे क्षेत्र पर काम करते हैं जिसमें एक है: शामिल => ...

+0

धन्यवाद! –

5
@itemlist = Item.select('name, address').where(...#some condition) 
संबंधित मुद्दे