아래 코드를 플러그인으로 추가하여 advanced_filter를 구현했고, 제 요구사항을 충족합니다.
if SiteSetting.unicode_usernames?
regexp = Regexp.new("(?i-mx:^\\@([a-zA-Z0-9_\\-.#{SiteSetting.allowed_unicode_username_characters}]+)$)")
Search.advanced_filter(regexp) do |posts, match|
username = match.downcase
user_id = User.where(staged: false).where(username_lower: username).pluck_first(:id)
if !user_id && username == "me"
user_id = @guardian.user&.id
end
if user_id
posts.where("posts.user_id = #{user_id}")
else
posts.where("1 = 0")
end
end
end
하지만 코어 코드를 올바르게 수정하는 방법을 모르겠습니다. 특히 allowed_unicode_username_characters가 변수인 경우 더 그렇습니다. 아마도 단순하지만 아마도 잘못된 해결책은 advanced_filter(/^\@([a-zA-Z0-9_\-.]+)$/i)를 advanced_filter(/^\@(.+)$/i)로 변경하는 것일 텐데, 이는 advanced_filter(/^user:(.+)$/i)에서 하신 것과 같습니다.