2011-11-06 17 views
5

मेरे पास है जहां एक मॉडल पर ऑपरेशन जो एक ऑब्जेक्ट देता है। लेकिन मैं इसे ऑब्जेक्ट नोटेशन में उपयोग नहीं कर सकता (ऐसा लगता है कि ऑब्जेक्ट के साथ एक सरणी [0] पर वापस आती है)।एक रिकॉर्ड लुकअप एक सरणी क्यों देता है? (रेल शुरुआती)

store = Store.where("some_id = ?", some_id) 

puts store.name # doesn't work 

puts store # shows array with the object at [0] 

उत्तर

10

क्योंकि कभी कभी आप नहीं जानते कि कितने वस्तुओं एक प्रश्न, लौट जाना चाहिए ताकि स्थिरता के लिए आप हमेशा एक सरणी मिलता है।

प्राप्त करने के लिए एक वस्तु का उपयोग

store = Store.where("some_id = ?", some_id).first 

आप देख रहे हैं मॉडल के प्राथमिक आईडी के लिए, आप भी उपयोग कर सकते हैं

store = Store.find(some_id) 

जो एक RecrodNotFound अपवाद बढ़ा देंगे (रेल द्वारा नियंत्रित किया डिफ़ॉल्ट रूप से 404 के रूप में) अगर यह वस्तु नहीं मिलती है।

+0

कैसे कर सकता करने के लिए बराबर हैं मैं जांचता हूं कि कोई परिणाम वापस नहीं आया है? यह काम नहीं प्रतीत होता है: 'store.blank' – Hopstream

+1

जब तक कुछ भी नहीं मिला, तो' store.nil 'के साथ जांच कर सकते हैं, तब तक स्टोर.नाम रखता है। –

+0

एक आखिरी मूर्ख सवाल जैकब ... क्या '.where ("some_id =?", Some_id) लिखने के लिए एक बेहतर संकेत है ... ... रेल में इस काम की तरह कुछ है ... '.where (: some_id = > some_id) ' – Hopstream

0

जहां रेलों में क्लॉज 3.x हमेशा वापस आ जाएगा और ओल ओब्जेक, जिसे आप विधि श्रृंखला के लिए उपयोग कर सकते हैं।

इस प्रकार खंड का हमेशा विवरण एक सरणी है।

के रूप में जेकब

ने सुझाव दिया पहला तत्व आप

object.first क्या करना है तक पहुँचने के लिए

5

वहाँ भी गतिशील ढूँढ़ने वाले

Store.find_by_some_id(some_id) 

वे

Store.where(:some_id => some_id).first 
+0

वर्थ नोटिंग, गतिशील खोजकर्ता (find_by * के अलावा) रेल 4 स्रोत में समर्थित नहीं हैं स्रोत: http://edgeguides.rubyonrails.org/4_0_release_notes.html#active-record-deprecations – GantMan

संबंधित मुद्दे