1

给定一个像联系人这样的对象:

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

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

我试过了:

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

但这需要数据库,这正是我想要避免的。想法?谢谢

4

3 回答 3

1

你所拥有的是一个关系。因此,添加另一个 where 会更改关系并查询该数据。它应该被延迟加载。所以在你的代码中

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' }  
于 2012-09-27T20:59:24.753 回答
0

尝试Enumerable#find_all

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

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

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

务必:

include Enumerable
于 2012-09-27T20:58:27.750 回答
0

您可以使用Enumerable find 方法

@contacts.find {|c| c.key_tag == 'def12'}
于 2012-09-27T20:53:39.687 回答