2013-03-03 6 views

उत्तर

49

अंतर यह है कि रिकॉर्ड मिलने पर वे वापस लौटते हैं, या जब यह नहीं मिलता है। निम्नलिखित उदाहरणों पर विचार करें:

>> User.create name: 'THE USER' # creates a user with id = 1 
>> User.find(1) # returns the user 
>> User.find_by_id(1) # returns the user 
>> User.where(id: 1).first # returns the user 

जैसा कि आप देख सकते हैं, मौजूदा उपयोगकर्ता को किसी भी 3 विधियों का उपयोग करके लाया जा सकता है। where उपयोग करने के साथ बड़ा अंतर आप श्रृंखला आदेशों (बेशक, first बुला पहले बिना।)

के लिए जब आप एक रिकॉर्ड है कि मौजूदा नहीं है

>> User.find(2) # raises an exception 
>> User.find_by_id(2) # nil 
>> User.where(id: 2).first # nil 

तो खोजने की कोशिश पर एक नजर है सकते हैं यहां, यह स्पष्ट है कि जब आप मौजूदा रिकॉर्ड नहीं होने के लिए find का उपयोग करते हैं, तो आपको अपवाद मिलता है। यह अपवाद ActiveRecord::RecordNotFound है जो उत्पादन वातावरण पर 404 प्रस्तुत करता है।

आशा है कि इससे मदद मिलती है!

अद्यतन

रेल 4 के लिए find_by

>> User.find_by(id: 1) # returns nil if there's no user with an id of 1 
>> User.find_by!(id: 1) # raises ActiveRecord::RecordNotFound when no record is found 
+18

आप नोट करना चाहिए कि सभी 'find_by_ *' तरीकों रेल 4 में 'find_by के पक्ष में deprecrated कर रहे हैं (*: ...)' तो यहाँ होगा कि: 'find_by (आईडी: ...) ' – pjam

+3

वाह मुझे यह नहीं पता था। धन्यवाद! इसका उल्लेख क्यों नहीं किया गया है? http://edgeguides.rubyonrails.org/4_0_release_notes.html – jvnill

1

find निम्न सिंटैक्स का उपयोग करता है => इस id द्वारा पंक्ति को खोजने के लिए प्रयोग किया जाता है। यह एकल रिकॉर्ड लौटाएगा।

YourModel.find(2) 
Address.find(1) 

find_by => इस रिकॉर्ड के किसी भी विशेषताओं द्वारा पंक्ति प्राप्त करने के लिए प्रयोग किया जाता है। यदि स्थिति मेल खाती है तो यह पहले मिलान रिकॉर्ड वापस कर देगा।

YourModel.find_by_attrname("value") 
Address.find_by_street_name_and_city("Andheri", "Newyork") 
Addess.find_by_id(4) 

where => इस प्रयोग किया जाता है सक्रिय रिकॉर्ड संबंध (अर्थात) वापस जाने के लिए शून्य या अधिक रिकॉर्ड किया जा सकता है शर्तों के आधार पर सक्रिय रिकॉर्ड मिलता है।

YourModel.where(:attrname => "something") 
Address.where(:city => "Newyork") 
2

लगता है => यह वापसी एकल रिकॉर्ड करता है, तो दी primary_key (आईडी) सिस्टम में मौजूद है अन्यथा में किसी त्रुटि दे देंगे।

Model.find(required_id_value) 

find_by => यह एकल रिकॉर्ड वापस आ जाएगी दिया विशेषता पर निर्भर करता है, और अगर विशेषता के मान DB में मौजूद नहीं है यह शून्य वापस आ जाएगी।

Model.find_by_name("your name") 

नाम यहां विशेषता है और यह आपके मॉडल में मौजूद होना चाहिए।

जहां => यह शून्य रिकॉर्ड के मामले में केवल एक रिकॉर्ड या शून्य वापस करने के लिए पहले उपयोग करने के लिए शून्य या अधिक रिकॉर्ड्स के साथ एक सक्रिय रिकॉर्ड संबंध लौटाएगा।

Model.where(id: id_value).first 
+0

** रिकॉर्ड.फिंड (0) ** 'ActiveRecord :: रिकॉर्ड नॉटफाउंड बढ़ाता है:' आईडी '= 0' ** रिकॉर्ड.find_by के साथ रिकॉर्ड नहीं मिला (आईडी: 0) ** रिटर्न 'शून्य' record.find_by_id (0) भी शून्य देता है हालांकि इसे रेल के बाद के संस्करणों में बहिष्कृत किया जाता है। ** रिकॉर्ड। कहीं (आईडी: 0) ** एक खाली सरणी देता है – Hanmaslah

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