1

連絡先のようなオブジェクトが与えられた場合:

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

与えられた@contactsは、その1つのDBクエリに数千のレコードを返します。次に、指定された「key_tag」に一致するオブジェクトが@contactsに存在するかどうかを取得/確認するにはどうすればよいですか。

私は試した:

@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に触れない限り、DBにヒットすることはありません。しかし、そこからデータを取得しようとすると、それが実行され、データが返されます。それらすべてを表示する場合は、#allのようなものを使用してそれらを配列として返し、次にArray#selectを使用してそれを検索できます。システムやDBの速度によっては、DBが選択を行う方が効率的な場合があります。

@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

列挙可能な検索メソッドを使用できます:

@contacts.find {|c| c.key_tag == 'def12'}
于 2012-09-27T20:53:39.687 に答える
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 に答える