# rails-0008: Enum — O(E²) value_method_names Array#include? in pairs.each loop **Severity:** MEDIUM **File:** activerecord/lib/active_record/enum.rb **Line:** 273 **Status:** PATCHED ## Description When defining an enum, `_enum_methods_module` iterates over all enum values with `pairs.each` and calls `value_method_names.include?(value_method_alias)` to check for alias conflicts. `value_method_names` is an Array that grows as each value is processed — O(E) scan per value, O(E²) total for E enum values. This runs at class load time for every model that declares an enum, so with many models and large enums it contributes to slow boot times. ## Root Cause `value_method_names` is an Array accumulating method names. The `include?` check is O(E) per iteration. ## Fix ```ruby # BEFORE value_method_names = [] # ... loop: value_method_names.include?(value_method_alias) value_method_names << value_method_name value_method_names << value_method_alias # AFTER value_method_names = Set.new # same interface, O(1) include? ``` ## Speedup ~10x at E=1000 enum values