2011-05-25 6 views
9

मान लें कि मेरे पास एक मॉडल है, Foo, जो बड़ा है और इसमें बहुत से घटक हैं। दिए गए अजाक्स क्वेरी के लिए मुझे केवल एक विशेष विशेषता में रुचि है, bar, जो फ़ूज़ तालिका में एक कॉलम है।रेल: केवल एक विशेषता लोड करें पूरे मॉडल

क्या कोई आसान तरीका है कि मैं केवल उस विशेषता को लोड कर सकता हूं, और शेष रिकॉर्ड को पुनः प्राप्त करने से परेशान नहीं हूं? उदाहरण के लिए यदि मैं जानना चाहता हूं कि आईडी # _ _ के साथ फू के लिए बार है, तो मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

14

आप select विधि को फोन करके केवल विशिष्ट स्तंभ लौट सकते हैं विशेषता युक्त एक स्ट्रिंग के साथ आप वापस लौटना चाहते हैं। आपके उदाहरण के लिए:

Foo.select('bar').first #<Foo bar: 1> 

ध्यान रखें कि इन वस्तुओं सामान्य ActiveRecord वस्तुओं की तरह काम करते हैं, लेकिन किसी भी क्षेत्र आप का चयन नहीं किया के लिए nil वापसी, इसलिए इस कार्यक्षमता का उपयोग देखभाल करेगी।

आप वर्ग के नाम से ही है या किसी भी संबंध पर चयन कॉल कर सकते हैं, तो आप श्रृंखला एक साथ ActiveRecord कॉल आप आमतौर पर where की तरह उपयोग कर सकते हैं, आदि

4

Foo.where(<condition>).select('fieldname')

उदाहरण

results = Foo.where('is_active = ?', true).select('bar')

पहुँच के रूप में चयनित क्षेत्रों:

results.map {|res| res.bar} की एक सरणी रिटर्न बार के

+0

बहुत मुश्किल समाधान पसंद करते हैं, यह एक कोशिश –

7

मैं इस

User.where(:id => user_id).pluck(:user_name).first #'tom' 
Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...] 
संबंधित मुद्दे