Dos documentos:
- (Objeto?) Detectar (ifnone = nil) {| obj | ...}
- (Objeto?) Find (ifnone = nil) {| obj | ...}
- (Objeto) detectar (ifnone = nil)
- (Objeto) find (ifnone = nil)
Passa cada entrada em enum para bloquear. Retorna o primeiro para o qual o bloco não é falso. Se nenhum objeto corresponder, chama ifnone e retorna seu resultado quando especificado, ou retorna nil caso contrário.
Se nenhum bloco for fornecido, um enumerador será retornado.
(1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35
Isso funcionou para mim:
clients.detect{|client| client.last['client_id'] == '2180' } #=> ["orange", {"client_id"=>"2180"}]
clients.detect{|client| client.last['client_id'] == '999999' } #=> nil
Consulte:
http://rubydoc.info/stdlib/core/1.9.2/Enumerable#find-instance_method
find
eselect
é quefind
retorna a primeira correspondência eselect
(com o apelido defindAll
) retorna todas as correspondências.