sql - rails ActiveRecord : Find from ActiveRecord result in O(1) time

标签 sql ruby-on-rails ruby activerecord

这里是一个简单的问题。假设我有一个这样的事件记录结果:

@users = User.all

稍后,我想获取具有特定 ID 的用户的数据。我可以轻松地执行 User.find('c5ab1bfc-90ac-4b59-b5d3-fd8940aab7b1') 但这将对数据库进行另一个查询。我知道用户在列表@users 中,那么有没有一种方法可以从@users 中找到具有特定 ID 的用户,而无需进行另一个数据库查询,也无需遍历 @users 对象?

最佳答案

是的,您可以使用#detect,它将选择关系中的第一个匹配项,而不会触发另一个查询:

@user = @users.detect{ |u| u.id == 'c5ab1bfc-90ac-4b59-b5d3-fd8940aab7b1' }

但老实说,如果您只是在用户 (User.find params[:id]) 上运行一个简单的 #find 查询,那不会杀死您的应用程序,除非我大错特错。

更新:

感谢 d34n5 纠正我,#select 将遍历整个集合,而#detect(别名#find)将停止并返回第一个出现的地方。

关于sql - rails ActiveRecord : Find from ActiveRecord result in O(1) time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927153/

相关文章:

ruby-on-rails - 尝试使用 ImageProcessing 时出现 Active Storage 文件未找到错误

ruby - Ruby 中的案例选择

sql - 如何统计oracle每月返回的行数?

sql - 大查询 SQL : How to find different sets of duplicates within a visit with same unique keys but different period of the visit?

ruby-on-rails - 更改文件类型回形针

ruby - 安装 Charlock_Holmes - 无法构建 gem 原生扩展

ruby-on-rails - 在 OS X 上为 ruby​​、rails 和 git 设置开发环境的好方法是什么?

mysql - 在sql文件中读取文本文件

MySQL 使用 if 语句从多个表中进行 SELECT

ruby-on-rails - Rails Active Model Serializer - has_many 和访问父记录