ActiveRecord खोजें और केवल चयनित कॉलम लौटाएं


89

संपादित करें २

यदि आप इस पर ठोकर खाते हैं, तो दोनों उत्तरों की जांच करें क्योंकि मैं अब इसके लिए प्लक का उपयोग करूंगा


मेरे पास एक बहुत बड़ा कस्टम डेटासेट है जिसे मैं ईचॉन के रूप में लौटाना चाहूंगा। एक हिस्सा है:

l=Location.find(row.id)
tmp[row.id]=l

लेकिन मैं कुछ ऐसा करना चाहूंगा:

l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l

लेकिन यह काम नहीं करता है। मुझे यह काम करने के लिए कैसे मिलेगा?

धन्यवाद

1
वैकल्पिक रूप से संपादित करें , क्या कोई ऐसा तरीका है जिससे मैं केवल उन विशेषताओं को पास कर सकता हूं जिन्हें मैं शामिल करना चाहता हूं?

जवाबों:


86

रेलों में २

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

... या ...

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

यह संदर्भ डॉक्टर आपको उन विकल्पों की पूरी सूची देता है, जिनका आप उपयोग कर सकते हैं .find, जिसमें संख्या, आईडी या किसी अन्य मनमाने कॉलम / बाधा द्वारा सीमित करना शामिल है।

रेल में 3 w / ActiveRecord क्वेरी इंटरफ़ेस

l = Location.where(["id = ?", id]).select("name, website, city").first

Ref: सक्रिय रिकॉर्ड क्वेरी इंटरफ़ेस

आप इन जंजीर कॉल के क्रम को स्वैप भी कर सकते हैं, यह करते हुए .select(...).where(...).first- ये सभी कॉल SQL क्वेरी का निर्माण करते हैं और फिर इसे बंद कर देते हैं।


लेकिन मैं केवल एक ही उदाहरण सभी नहीं चाहते हैं
टिमपोन

मैंने अपना उत्तर संपादित किया। :limitआपको यह चाहिए, या :firstया :lastजो भी आप चाहते हैं उसके आधार पर। मैंने जो संदर्भ दस्तावेज़ जोड़ा है, वह आपको बताएगा कि यह सब कैसे करना है।
जेफ्लंट


205

प्लक (स्तंभ)

इस पद्धति को किसी एकल स्तंभ द्वारा सीधे SQL क्वेरी के रूप में चयन करने के लिए डिज़ाइन किया गया है निर्दिष्ट कॉलम नाम के मानों के साथ सरणी। मानों में स्तंभ के समान डेटा प्रकार है।

उदाहरण:

Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)

देख http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

इसकी शुरुआत में ३.३ रेल्स हैं और केवल सिंगल कॉलम स्वीकार करती हैं। रेल 4 में, यह कई कॉलम स्वीकार करता है


1
ठीक है, कई कॉलम के साथ प्लक कमाल है .. बस इस जवाब पर सीखा है। रेल 3 को स्वीकृत उत्तर की आवश्यकता है।
जे। शेफर्ड

स्वीकृत उत्तर सही कारण है प्लक तब उपलब्ध नहीं था।
प्रसाद.सूरसे

User.pluck (: ईमेल,: आईडी) "उन" "ईमेल", "उन" "आईडी" का चयन करें "उन"
प्रणव प्रशांत

2
Model.uniq अब Model.distinct (कम से कम रेल 5 में) है।
मर्टर्टल

लगता है कि आप रेल 3.2 में कर सकते हैं: Location.select([:name, :website, :city])यदि आप इसे एक सरणी पास करते हैं
CTS_AE

24

मेरा उत्तर काफी देर से आता है क्योंकि मैं एक बहुत नया डेवलपर हूं। यह आप क्या कर सकते हैं:

Location.select(:name, :website, :city).find(row.id)

Btw, यह पटरियों 4 है


यह चयनित उत्तर होना चाहिए और सबसे सीधे प्रश्न का उत्तर देना चाहिए।
माइकल विल्टबैंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.