Отличная находка, @thoka!
Проблема здесь:
users возвращает {"username_lower" => объект User }.
Однако, если name не приведен к нижнему регистру, users[name] не существует.
Исправление:
if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...
Или ещё лучше: приведите все имена к нижнему регистру в начале метода, так как там много проблем. groups корректно использует .where("lower(name) IN (?)", @names.map(&:downcase)), но функции visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids и members_visible_group_ids все используют where(name: @names), что также вносит проблемы с чувствительностью к регистру.