Из документов:
- (Объект?) Обнаружить (ifnone = nil) {| obj | ...}
- (Объект?) Find (ifnone = nil) {| obj | ...}
- (Объект) обнаружение (ifnone = ноль)
- (Объект) найти (ifnone = ноль)
Пропускает каждую запись в enum для блокировки. Возвращает первое, для которого блок не является ложным. Если ни один объект не соответствует, вызывает ifnone и возвращает его результат, когда он указан, или возвращает nil в противном случае.
Если блок не задан, вместо него возвращается перечислитель.
(1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35
Это сработало для меня:
clients.detect{|client| client.last['client_id'] == '2180' } #=> ["orange", {"client_id"=>"2180"}]
clients.detect{|client| client.last['client_id'] == '999999' } #=> nil
Смотрите:
http://rubydoc.info/stdlib/core/1.9.2/Enumerable#find-instance_method
find
и вselect
том, чтоfind
возвращает первое совпадение, иselect
(с псевдонимомfindAll
) возвращает все совпадения.