开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 28 天,点击查看活动详情”
CRUD 操作
条件读取数据
除了 order 方法之外,还可以调用其他方法对 where 方法获取到的数据列表进行处理,这些方法包含了:
- group:类似 SQL 语句中的 GROUP BY 子句
- limit:指定返回结果的行数
- offset:指定返回结果的偏移,例如 offset >= 4,则从返回的结果从第4个符号条件的记录开始
- joins/join/left_join:在 SQL 语句中加入类似 LEFT JOIN 之类的子句
- include:根据表见的关系,在查询语句中自动加入 LEFT OUTER JOIN 的 SQL 子句
- select:返回的字段,默认是所有
- from:SELECT 语句 FROM 后面的子语句,默认是当模型类对应的表,也可以根据情况制定查询其他的表或者视图
除了这些方法之外,ActiveRecord 也支持直接使用原生 SQL 来查询,这就需要使用到 find_by_sql 方法,同时也支持使用占位符的参数传递,使用方式如下:
users = User.find_by_sql('SELECT * FROM users')
# 占位符参数传递
users = User.find_by_sql('SELECT * FROM users where username=? and password=?', username, password)
ActiveRecord 还根据数据库表中的字段动态生成了相应的查询方法以简化查询,例如:
users = User.find_by_username('john')
users = User.find_by_password('12345')
users = User.find_by_username_and_password('john','1234')
这些方法都是根据 Ruby 的动态特性而实现的。
更新数据
相对于读取数据而言,更新数据则简单的多,更新数据的方法和创建数据的方法类似,使用复制语句为实例对象的属性赋值,然后使用 save() 方法保存即可,例如:
user = User.find_by_username('jack')
user.username = 'JACK'
user.save
当然也可以使用 update 方法更新指定字段的值,该方法更新后无须再调用 save 方法保存。
user = User.first()
user.update(:username=>'JOHN', :password=>'123456')
# user.update(username: 'JOHN', password: '123456')
update 方法还支持传入主键,直接更新指定主键的属性,例如:
User.udpate(1, username: 'Hanna')
update_all 方法与 SQL 语句中的 UPDATE 语句,类似,他接受两个参数,第一个参数为更新的字段和值,第二个参数为更新的范围条件
删除数据
删除数据有如下几种方法:
第一种方法是可以使用对象的 destroy 方法,先查询到具体的对象,然后调用该方法
user = User.find(2)
user.destroy
第二种方法是直接通过调用 delete 方法,删除指定主键的数据
User.delete(1)
User.delete([1,2,3])
也可以使用 delete_by,根据条件删除
delete_all 方法不接收任何参数,直接删除所有