给定联系人之类的对象:
Contact.rb (id, fname, lname, key_tag)
@contacts = Contacts.where(:user_id => @user.id)
鉴于@contacts在一个数据库查询中返回1000个记录。然后我如何获取/查看@contacts中是否存在与给定'key_tag'匹配的对象。
我试过了:
@contacts.where(:key_tag => 'def12')
但是重新查询数据库,这正是我想要避免的。想法?感谢
答案 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)
@contacts.find_all {|a| a[:key_tag] == 'def12'}
或者,如果您只想找到第一个(假设key_tag是唯一的)
@contacts.find {|a| a[:key_tag] == 'def12'}
请务必:
include Enumerable