這篇文章將會介紹在 Active Record Query,find 與 find_by 的不同之處。其實這兩種方式取出資料庫的物件是相同的
我們先檢視 find 跟 find_by 的SQL語法:
task = Task.find(1)
# 對應的 SQL 語法會是:
SELECT * FROM books WHERE (tasks.id = 1) LIMIT 1
task = Took.find_by(id:1)
# 對應的 SQL 語法會是:
SELECT * FROM tasks WHERE (books.id = 1) LIMIT 1
在 rails console 裡面
這兩種寫法都可以取得相同的資料,不同之處在當沒找到符合條件的資料時,處理回傳值的方式有明顯的差異。
現在來試試看,沒有找到資料時會如何呈現錯誤
在圖中可以看到 find(id) 會直接爆出錯誤訊息: ActiveRecord::RecordNotFound (Couldn’t find Task with ‘id’=100)
find_by(id: id)會比較客氣地回傳 nil 值出來,所以當你不想處理捕捉例外情況(catching exceptions)時,就要選擇 find_by(id: id)的做法。
如果你還是想要有回傳 ActiveRecord::RecordNotFound,可以在find_by後面加上驚嘆號!
Comments