找得好 @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),这同样会引入大小写敏感的问题。