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

搜尋大對決 Find, Find_by, Where

    Find

    輸入一個 id 參數後,尋找相對應的一筆資料。
    @article = Article.find(params[:id])
    在 SQL 的部分:
    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
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.