Find
輸入一個 id 參數後,尋找相對應的一筆資料。
@article = Article.find(params[:id])
在 SQL 的部分:
如果 find 找不到相對應的資料時,會跳出兇殘的錯誤訊息:
Find_by
輸入一個或多個參數後,找到相對應的一筆資料。
@article = Article.find(id: params[:id], title: params[:title])
在 SQL 的部分:
如果 find_by 找不到相對應的資料時,會跳出比較溫和的 undefined method 訊息,並回傳 nil:
在 find_by 後面加驚嘆號,find_by! 也會產生跟 find 一樣的錯誤訊息,但仍能帶入多個參數。
Where
輸入一個或多個參數後,找到相對應的多筆資料。
@article = Article.where(params[:id])
這個 where 就是 SQL 語法的 where,所以參數也能使用 SQL 語法。
此外,參數也可以是 String / Array / Hash 當搜尋條件。
find vs find_by
1. 條件數量不同,find 只能有一個,find_by 可以有很多個。
2. 錯誤訊息不同 ( 但是 find 可以加驚嘆號,就等同 find )
find 系列 vs where 系列
1. find 系列只會有一筆資料,where 會找出符合搜尋條件的所有資料
2. where 可以使用 SQL 語法當作搜尋條件
Reference
https://ithelp.ithome.com.tw/articles/10225325