Rails Active Record 提供了从数据库中检索数据的不同方法。无需直接使用 SQL 来查找数据库。下面列出这些查找方法:

检索单个对象
find 方法:可以使用 find 方法检索指定主键对应的对象,指定主键时可以使用多个选项。


take 方法:




first 方法:first 方法默认查找按主键排序的第一条记录。
last 方法:last 方法默认查找按主键排序的最后一条记录。
find_by 方法:find_by 方法查找匹配指定条件的第一条记录。



批量检索多个对象
find_each 方法:find_each 方法批量检索记录,然后逐一把每条记录作为模型传入块。在下面的例子中,find_each方法取回 1000 条记录,然后逐一把每条记录作为模型传入块。:batch_size 选项用于指明批量检索记录时一次检索多少条记录。:start 选项用于配置想要取回的记录序列的第一个 ID,比这个 ID 小的记录都不会取回。:finish 选项用于配置想要取回的记录序列的最后一个 ID,比这个 ID 大的记录都不会取回。
find_in_batches 方法:find_in_batches 方法和 find_each 方法类似,两者都是批量检索记录。区别在于,find_in_batches 方法会把一批记录作为模型数组传入块,而不是像 find_each 方法那样逐一把每条记录作为模型传入块。
条件查询
纯字符串条件
可以直接用纯字符串为查找添加条件。例如,Client.where("orders_count = '2'") 会查找所有 orders_count 字段的值为 2 的客户记录。
数组条件










分组
要想在查找方法生成的 SQL 语句中使用 GROUP BY 子句,可以使用 group 方法。要想得到一次查询中分组项目的总数,可以在调用 group 方法后调用 count 方法。


unscope 方法


only 方法


空关系
none 方法返回可以在链式调用中使用的、不包含任何记录的空关系。在这个空关系上应用后续条件链,会继续生成空关系。对于可能返回零结果、但又需要在链式调用中使用的方法或作用域,可以使用 none 方法来提供返回值。

只读对象
在关联中使用 Active Record 提供的 readonly 方法,可以显式禁止修改任何返回对象。如果尝试修改只读对象,不但不会成功,还会抛出 ActiveRecord::ReadOnlyRecord 异常。

联结表
joins 方法



left_outer_joins 方法


N + 1 查询问题
假设有如下代码,查找 10 条客户记录并打印这些客户的邮编:

N + 1 查询问题的解决办法


使用 SQL 语句进行查找
要想直接使用 SQL 语句在数据表中查找记录,可以使用 find_by_sql 方法。find_by_sql 方法总是返回对象的数组,即使底层查询只返回了一条记录也是如此。

执行 EXPLAIN 命令


网友评论