Sự khác nhau giữa find
, where
và find_by_id
là gì? Tất cả đều hoạt động khi bạn cố gắng tìm một người dùng được cấp một ID.Sự khác nhau giữa tìm, ở đâu và find_by_id là gì?
Trả lời
Sự khác biệt là những gì họ quay lại khi tìm thấy bản ghi hoặc khi không tìm thấy bản ghi. Hãy xem xét các ví dụ sau:
>> 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
Như bạn có thể thấy, người dùng hiện tại có thể được tìm nạp bằng bất kỳ phương pháp nào trong số 3 phương pháp. Sự khác biệt lớn với việc sử dụng where
là bạn có thể lệnh chuỗi (tất nhiên, mà không gọi first
đầu tiên.)
Hãy có một cái nhìn tại khi bạn cố gắng tìm ra một kỷ lục mà không phải là hiện
>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil
Vì vậy, ở đây, rõ ràng là khi bạn sử dụng find
để tìm kiếm bản ghi không tồn tại, bạn sẽ nhận được một ngoại lệ. Ngoại lệ đó là ActiveRecord::RecordNotFound
, hiển thị 404 trên môi trường sản xuất.
Hy vọng điều này sẽ hữu ích!
CẬP NHẬT
Rails 4 sử dụng cú pháp sau đây để 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
find
=> này được sử dụng để tìm hàng bởi id
. Điều này sẽ trả về một bản ghi.
YourModel.find(2)
Address.find(1)
find_by
=> điều này được sử dụng để nhận hàng theo bất kỳ thuộc tính nào của bản ghi. Điều này sẽ trả lại bản ghi khớp đầu tiên nếu điều kiện phù hợp.
YourModel.find_by_attrname("value")
Address.find_by_street_name_and_city("Andheri", "Newyork")
Addess.find_by_id(4)
where
=> này được sử dụng để ghi chép hoạt động dựa trên các điều kiện để trở lại mối quan hệ kỷ lục hoạt động (ví dụ) có thể không hay nhiều hồ sơ.
YourModel.where(:attrname => "something")
Address.where(:city => "Newyork")
tìm => trả lại hồ sơ duy nhất này nếu primary_key nhất định (id) tồn tại trong hệ thống khác trong sẽ cung cấp cho một lỗi.
Model.find(required_id_value)
find_by => Đây sẽ trở lại hồ sơ duy nhất phụ thuộc vào thuộc tính nhất định, và nếu giá trị của thuộc tính là không tồn tại trong DB nó sẽ trở lại con số không.
Model.find_by_name("your name")
tên ở đây là thuộc tính và nó phải tồn tại trong Phương thức của bạn.
trong đó => Điều này sẽ trả lại một mối quan hệ bản ghi đang hoạt động với số không hoặc nhiều bản ghi bạn cần sử dụng trước để chỉ trả về một bản ghi hoặc không trong trường hợp không có bản ghi.
Model.where(id: id_value).first
** Record.find (0) ** tăng 'ActiveRecord :: RecordNotFound: Không thể tìm thấy Bản ghi với 'id' = 0' ** Record.find_by (id: 0) ** trả về 'nil' Record.find_by_id (0) cũng trả về nil mặc dù nó không được chấp nhận trong các phiên bản sau của đường ray. ** Record.where (id: 0) ** trả về một mảng trống – Hanmaslah
- 1. Sự khác nhau giữa HTTP_CLIENT_IP và HTTP_X_FORWARDED_FOR là gì?
- 2. Sự khác nhau giữa CPU và Chipset là gì?
- 3. Sự khác nhau giữa Smack và aSmack là gì?
- 4. Sự khác nhau giữa TCHAR và WCHAR là gì?
- 5. Sự khác nhau giữa Phing và PHPUnderControl là gì?
- 6. sự khác nhau giữa AppDomain.CreateInstance và Activator.CreateInstance là gì?
- 7. Sự khác nhau giữa KERN_INVALID_ADDRESS và KERN_PROTECTION_FAILURE là gì?
- 8. sự khác nhau giữa BaseHTTPServer và SimpleHTTPServer là gì? khi nào và ở đâu để sử dụng?
- 9. Sự khác nhau giữa IPV6_ADD_MEMBERSHIP và IPV6_JOIN_GROUP là gì?
- 10. Sự khác nhau giữa NHibernate và iBATIS.NET là gì?
- 11. Sự khác nhau giữa `ImmutableSortedSet` và fsharp` Set` là gì?
- 12. Sự khác nhau giữa GenericServlet, HttpServlet và Servlet là gì?
- 13. Sự khác nhau giữa __stdcall và _stdcal là gì?
- 14. Sự khác nhau giữa xelement.load và xdocument.load là gì?
- 15. Sự khác nhau giữa XHTML và HTML là gì?
- 16. Sự khác nhau giữa PropertyChangeListener và VetoableChangeListener là gì?
- 17. Sự khác nhau giữa -rpath và -L là gì?
- 18. Sự khác nhau giữa app.doScript và $ .evalFile là gì?
- 19. OpenXml: Sự khác nhau giữa SdtBlock và SdtCell là gì?
- 20. Sự khác nhau giữa BSTR và _bstr_t là gì?
- 21. Sự khác nhau giữa "window.location.href" và "window.location.hash" là gì?
- 22. sự khác nhau giữa SCRIPT_FILENAME và SCRIPT_NAME là gì?
- 23. Sự khác nhau giữa R.styleable, R.style và R.attr là gì?
- 24. sự khác nhau giữa touchmove và gesturechange là gì?
- 25. Sự khác nhau giữa java.lang.Math và java.lang.StrictMath là gì?
- 26. Sự khác nhau giữa Subtotal và BaseSubtotal là gì?
- 27. Sự khác nhau giữa Float.POSITIVE_INFINITY và Float.MAX_VALUE là gì?
- 28. Sự khác nhau giữa ống và ổ cắm là gì?
- 29. sự khác nhau giữa Vundle và NeoBundle là gì?
- 30. Sự khác nhau giữa "<>" và "! =" Là gì?
Bạn nên lưu ý rằng tất cả các phương thức 'find_by_ *' đều bị mất giá trị trong đường ray 4 có lợi cho 'find_by (*: ...)' ở đây sẽ là: 'find_by (id: ...) ' – pjam
wow Tôi không biết điều đó. cảm ơn! tại sao không phải là đề cập ở đây? http://edgeguides.rubyonrails.org/4_0_release_notes.html – jvnill