これがちょっとした解決策です。正規表現は使用しませんが、if/elseステートメントも使用しません。制作に値するよりもアカデミックです。
前提条件:文字列はコンマで区切られたタイトルのリストであり、これらは一意のセット(重複なし)であり、その順序は重要ではありません。
titles = Set.new(str.split(','))
#=> #<Set: {"admin", "artist", "location_manager", "event_manager"}>
titles_to_toggle = ["location_manager"]
#=> ["location_manager"]
titles ^= titles_to_toggle
#=> #<Set: {"admin", "artist", "event_manager"}>
titles ^= titles_to_toggle
#=> #<Set: {"location_manager", "admin", "artist", "event_manager"}>
titles.to_a.join(",")
#=> "location_manager,admin,artist,event_manager"
これはすべて、文字列を一種のセットとして使用していることを前提としています。もしそうなら、おそらくセットを使用する必要があります。そうでない場合で、実際に文字列操作関数を操作する必要がある場合は、if-else、または三項演算子などのバリアント、またはunless、Bergiの答えを使用する以外に方法はおそらくありません。
解決策としての正規表現についても注目に値します。エッジケースを考慮してください。'location_manager'が文字列の途中にある場合、余分なカンマを削除しますか?カンマが文字列の最初または最後にある場合、カンマの削除を正しく処理しますか?追加時にカンマを正しく追加しますか?これらの理由から、セットを文字列ではなくセットまたは配列として扱う方が理にかなっています。