Вы были почти там, используйте Enumerable#select
(кстати, сканирует всех членов коллекции):
animals.select { |animal| animal[:cow] }
#=> [{:id=>1, :cow=>true}, {:id=>2, :cow=>true}, {:id=>3, :cow=>true}]
Или наоборот:
animals.select { |animal| !animal[:cow] }
#=> [{:id=>4, :cow=>false}, {:id=>5, :cow=>false}]
Возвращенные результаты - все еще объекты Ruby: массивы хэшей.
В качестве альтернативы вы можете группировать по статусу (Enumerable#group_by
):
animals.group_by { |a| a[:cow] }
#=> {true=>[{:id=>1, :cow=>true}, {:id=>2, :cow=>true}, {:id=>3, :cow=>true}], false=>[{:id=>4, :cow=>false}, {:id=>5, :cow=>false}]}