搜尋大對決 Find, Find_by, Where

2022/08/01閱讀時間約 1 分鐘

Find

輸入一個 id 參數後,尋找相對應的一筆資料。
@article = Article.find(params[:id])
在 SQL 的部分:
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
    Mike
    Mike
    紀錄並分享學習 Code 的過程~
    留言0
    查看全部
    發表第一個留言支持創作者!