Ruby on Rails: find vs find_by

New Panuwat
Swiftlet Tech
Published in
2 min readJul 22, 2019
photo by Nick Fewings

ตั้งใจว่าจะเขียน เรื่องราวของ Ruby ให้มากขึ้น เป็น tricks เล็กๆน้อยๆในเรื่องราวของ Ruby ที่เจอมาในชีวิตประจำวัน หรือ ไปอ่านเจอมาแล้วคิดว่ามีประโยชน์ เลยอยากจะเอามาแชร์ ก็เลยคิดว่าจะรวบรวมมาเขียนเป็น Blog สั้นๆให้อ่านกัน

วันนี้เลยจะมาเริ่มที่เรื่องของ find และ find_by เป็น methods นึงใน ActiveRecord ที่ Rails มีมาให้เราใช้ query ข้อมูลใน database เช่นเดียวกับ where แต่วันนี้เราจะพูดถึงแค่สองอย่างนี้กันก่อน

ต่างกันอย่างไร ?

สองแบบนี้จะreturn object ออกมาเหมือนกัน หากเราหาเจอ

Todo.find_by(id: 1)
Todo.find(1)

แล้วถ้า find ไม่เจอหล่ะ ?…

  • find จะ return error เมื่อเรา find ไม่เจอ คือ พังนั่นเอง (ActiveRecord::RecordNotFound) เช่น User.find(1) ก็จะ return object ของ id = 1 ออกมา ถ้าไม่เจอก็พัง
ก็จะมี error ออกมาแบบนี้
  • find_by จะ return nil ถ้าเราfind ไม่เจอ แต่จะยังไม่พัง แต่จะได้ค่า nil ออกมา เช่น User.find_by(name: ‘bob’) เราจะหา name ของ bob ถ้ามี ก็จะ return object ออกมา ถ้าไม่มีก็จะ return nil
return nil ออกมา

เมื่อไรควรใช้ find หรือ find_by ?

  • หากต้องการค้นหา id เพียงอย่างเดียวให้ใช้ find()
  • หากต้องการระบุว่าจะหาอะไร ให้ใช้ find_by() เช่น find_by(name: ‘nonny’), find_by(id: 1), blah blah

หากผิดพลาด หรือ มีข้อเสนอแนะอะไร ตอบกลับมาด้านล่างได้เลยนะครับ ยินดีแชร์ครับ วันนี้ก็สั้นๆเพียงเท่านี้เจอกันใหม่ตอนหน้าครับ

--

--