Rubyのmin_byで比較対象にnilがいるとArgumentErrorでコケる
Rubyの簡単なサンプル
arr = [ { name: "hoge1", age: 10 }, { name: "hoge2", age: 13 }, { name: "hoge3", age: 15 }, { name: "hoge4", age: nil } ] arr.min_by{ |e| e[:age] } => ArgumentError (comparison of NilClass with 10 failed)
ブロックの戻り値に<=>で比較できないものが混じっていると例外ArgumentError min_by (Enumerable) - Rubyリファレンス
とのこと
解決法
nilの扱いによって対応が変わるかと思います
nilを最小値とする場合
nilがあれば取得、無ければmin_byで最小値を取得
arr.find { |e| e[:age].nil? } || arr.min_by { |e| e[:age] } => {:name=>"hoge4", :age=>nil}
nilを除外して最小値を取得する場合
rejectでnilを除外してから、min_byで最小値を取得
arr.reject { |e| e[:age].nil? }.min_by { |e| e[:age] } => {:name=>"hoge1", :age=>10}