ユーザー名の大文字が作曲者の到達可能なメンションチェックを破損させる

良い発見ですね @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_checktopic_allowed_group_idsmentionable_group_idsmembers_visible_group_ids といった関数はすべて where(name: @names) を使用しており、これも大文字小文字の区別に関する問題を引き起こしています。

「いいね!」 3