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接收参数为条件,会回传所有符合条件资料的集合,没有符合条件的资料则会回传空集合


<<:  DAY03 环境建构(Anaconda + Jupyter Notebook)及套件工具安装

>>:  DAY3-排序(二)

【Day 24】JavaScript 事件处理

说明:事件是您在编程时系统内发生的动作或者发生的事情,系统响应事件後,如果需要,您可以某种方式对事件...

课堂笔记 - 物联网概论 课後测验

课後测验 单选题 感知层(单选题) 1.下列哪一项不属於物联网的应用? A.洗衣机於电费最低时段自...

Day23-TypeScript(TS)函式(Function)的选择性参数(Optional Parameter)

今天要来介绍TypeScript(TS)函式(Function)的选择性参数(Optional Pa...

Day03 安装环境

我们昨天有提到说,Django是一个Python的框架,理所当然的我们的电脑也要有Python才能运...

Vue3 ( 进阶 API ) -3

1.Refs 似 Document.getElementById() (1)直操作DOM <i...