De los documentos:
- (¿Objeto?) Detectar (ifnone = nil) {| obj | ...}
- (¿Objeto?) Find (ifnone = nil) {| obj | ...}
- (Objeto) detectar (ifnone = nil)
- (Objeto) find (ifnone = nil)
Pasa cada entrada en la enumeración para bloquear. Devuelve el primero para el que el bloque no es falso. Si ningún objeto coincide, llama a ifnone y devuelve su resultado cuando se especifica, o devuelve nil de lo contrario.
Si no se proporciona ningún bloque, se devuelve un enumerador.
(1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35
Esto funcionó para mí:
clients.detect{|client| client.last['client_id'] == '2180' } #=> ["orange", {"client_id"=>"2180"}]
clients.detect{|client| client.last['client_id'] == '999999' } #=> nil
Ver:
http://rubydoc.info/stdlib/core/1.9.2/Enumerable#find-instance_method
find
yselect
es quefind
devuelve la primera coincidencia yselect
(aliasfindAll
) devuelve todas las coincidencias.