给定具有100个项目的查询中的对象。如何在对象中找到不需要重新查询数据库的项目?

时间:2012-09-27 20:43:03

标签: ruby-on-rails ruby-on-rails-3 activemodel

给定联系人之类的对象:

Contact.rb (id, fname, lname, key_tag)
@contacts = Contacts.where(:user_id => @user.id)

鉴于@contacts在一个数据库查询中返回1000个记录。然后我如何获取/查看@contacts中是否存在与给定'key_tag'匹配的对象。

我试过了:

@contacts.where(:key_tag => 'def12')

但是重新查询数据库,这正是我想要避免的。想法?感谢

3 个答案:

答案 0 :(得分:1)

你所拥有的是一种关系。因此,添加另一个更改关系并查询数据的位置。它应该是懒惰的。所以在你的代码中

Contact.rb (id, fname, lname, key_tag)
@contacts = Contacts.where(:user_id => @user.id)

如果你不接触@contacts,它甚至不应该点击数据库。但是一旦你尝试从中获取数据,它就会被执行并返回数据。如果要显示所有这些内容,可以使用#all之类的东西将它们作为数组返回,然后使用Array#select搜索它。根据系统和/或数据库的速度,数据库执行选择可能更有效。

@contacts = Contacts.where(:user_id => @user.id).all 
@contacts_with_key = @contacts.select { |c| c.key_tag == 'def12' }  

答案 1 :(得分:0)

您可以使用Enumerable find method

@contacts.find {|c| c.key_tag == 'def12'}

答案 2 :(得分:0)

尝试Enumerable#find_all

@contacts.find_all {|a| a[:key_tag] == 'def12'}

或者,如果您只想找到第一个(假设key_tag是唯一的)

@contacts.find {|a| a[:key_tag] == 'def12'}

请务必:

include Enumerable