Ruby on Rails: find vs find_by
Published in
2 min readJul 22, 2019
ตั้งใจว่าจะเขียน เรื่องราวของ Ruby ให้มากขึ้น เป็น tricks เล็กๆน้อยๆในเรื่องราวของ Ruby ที่เจอมาในชีวิตประจำวัน หรือ ไปอ่านเจอมาแล้วคิดว่ามีประโยชน์ เลยอยากจะเอามาแชร์ ก็เลยคิดว่าจะรวบรวมมาเขียนเป็น Blog สั้นๆให้อ่านกัน
วันนี้เลยจะมาเริ่มที่เรื่องของ find และ find_by เป็น methods นึงใน ActiveRecord ที่ Rails มีมาให้เราใช้ query ข้อมูลใน database เช่นเดียวกับ where แต่วันนี้เราจะพูดถึงแค่สองอย่างนี้กันก่อน
ต่างกันอย่างไร ?
สองแบบนี้จะreturn object ออกมาเหมือนกัน หากเราหาเจอ
แล้วถ้า find ไม่เจอหล่ะ ?…
- find จะ return error เมื่อเรา find ไม่เจอ คือ พังนั่นเอง (ActiveRecord::RecordNotFound) เช่น User.find(1) ก็จะ return object ของ id = 1 ออกมา ถ้าไม่เจอก็พัง
- find_by จะ return nil ถ้าเราfind ไม่เจอ แต่จะยังไม่พัง แต่จะได้ค่า nil ออกมา เช่น User.find_by(name: ‘bob’) เราจะหา name ของ bob ถ้ามี ก็จะ return object ออกมา ถ้าไม่มีก็จะ return nil
เมื่อไรควรใช้ find หรือ find_by ?
- หากต้องการค้นหา id เพียงอย่างเดียวให้ใช้ find()
- หากต้องการระบุว่าจะหาอะไร ให้ใช้ find_by() เช่น find_by(name: ‘nonny’), find_by(id: 1), blah blah
หากผิดพลาด หรือ มีข้อเสนอแนะอะไร ตอบกลับมาด้านล่างได้เลยนะครับ ยินดีแชร์ครับ วันนี้ก็สั้นๆเพียงเท่านี้เจอกันใหม่ตอนหน้าครับ