2013-03-03 24 views

cevap

49

Fark, bir kayıt bulunduğunda veya bulunmadığında döndükleri şeydir. Aşağıdaki örnekleri inceleyin: Gördüğünüz gibi, mevcut bir kullanıcı 3 yöntemlerden birini kullanarak getirilen olabilir

>> 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 

. where kullanarak büyük farkı (tabii ilk first uğramadan.) Zincir komutları

Diyelim ki Yani

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

mevcut olmayan bir kaydı bulmak için çalışırken bir göz atalım olabilir olduğu Burada, mevcut olmayan bir kaydı aramak için find kullandığınızda, bir istisna alırsınız. Bu istisna, üretim ortamında bir 404 veren ActiveRecord::RecordNotFound.

Bu yardımcı olur umarız!

GÜNCELLEME

Raylar 4 bu id tarafından satır bulmak için kullanılır =>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

Hepiniz 'find_by_ *' yöntemler find_by 'lehine raylar 4'te deprecrated olduğunu belirtmeliyiz (*: ...)' işte be olacağını: 'find_by (id: ...) – pjam

+3

wow Bunu bilmiyordum. Teşekkürler! neden burada bahsedilen değil? http://edgeguides.rubyonrails.org/4_0_release_notes.html – jvnill

1

find için aşağıdaki sözdizimini kullanır. Bu tek rekoru geri verecektir.

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

find_by => Bu kaydın herhangi özelliklere göre satır almak için kullanılır. Koşul eşleştiğinde bu ilk eşleşme kaydını döndürür. => Bu kullanılır

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

where sıfır ya da daha fazla kayıt olabilir etkin kayıt ilişkisi (yani,) dönmek için koşullara bağlı olarak, aktif kayıtları almak.

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

bulmak => Bu dönüş verilen primary_key (id) bir hata verecektir aksi de sistemde varsa tek kaydı. => Bu tek bir kayıt dönecektir

Model.find(required_id_value) 

find_by , belirtilen özelliklere bağlıdır ve öz nitelik değeri DB mevcut değilse nil döndürecektir. Burada adı bir özelliktir ve Modal'ınızda bulunması gerekir.

Burada => Bu, sıfır kaydının geri döndürülmesi durumunda yalnızca bir kaydı döndürmek için ilk önce kullanmanız gereken sıfır veya daha fazla kayıtla etkin bir kayıt ilişkisi döndürecektir.

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

** Record.find (0) ** 'ActiveRecord :: RecordNotFound' yükseldi: 'id' = 0 'ile kayıt bulunamadı ** Record.find_by (id: 0) ** 'nil' döndürür Record.find_by_id (0), daha sonraki ray sürümlerinde kullanımdan kaldırılmış olsa da nil değerini döndürür. ** Record.where (id: 0) ** boş bir dizi döndürüyor – Hanmaslah

İlgili konular