这里是一个简单的问题。假设我有一个这样的事件记录结果:
@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/