iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

Ruby on Rails JS系列 第 3

Ruby on Rails Find Find_by Where 差別

find方法

回傳帶入的參數與primary key(流水編號id)相同的資料。

找到primary key(id)是3的user
user = User.find(3)
=> #<User id: 10, first_name: "Leo">
Model會幫我們翻譯成以下的SQL語法

SELECT * FROM users WHERE (users.id = 10) LIMIT 1
特別注意的是,find方法如果沒有找到對應的資料,會噴出錯誤ActiveRecord::RecordNotFound

find_by方法

find_by方法會取回第一個符合條件的資料

#回傳第一個符合條件的資料
User.find_by(first_name: 'Leo')
#=> #<User id: 3, first_name: "Leo">

#如果沒有對應的資料會回傳nil
User.find_by(first_name: 'Jon')
#=> nil
Model同樣會幫我們翻譯成SQL語法

SELECT * FROM users WHERE (users.first_name = 'Leo') LIMIT 1

where方法

where方法則讓我們可以得到所有符合條件的集合(collection),如果沒有符合的資料則會會傳空的集合

#找出所有符合名字是"David"的user且照created_at的時間降序排列
users = User.where(first_name: 'Leo').order(created_at: :desc)
上面的where會找出所有符合條件的集合,而後面的order方法可以決定排列的方式,:desc表示降序(Descending)排列

會幫我們翻譯成下面的SQL語法

SELECT * FROM "users" WHERE (users.first_name = 'Leo') ORDER BY created_at DESC
以下做個小總結。

你可以這樣回答:

find接收單一參數,會回傳帶入的參數與primary key(流水編號id)相同的資料,沒找到會噴錯

find_by接收參數為條件(通常是hash),會回傳符合條件的第一筆資料,沒有符合條件的資料會回傳nil

where接收參數為條件,會回傳所有符合條件資料的集合,沒有符合條件的資料則會回傳空集合


上一篇
MVC架構
下一篇
Rails has_many
系列文
Ruby on Rails JS29

尚未有邦友留言

立即登入留言