Rails: upcase / downcase para strings não ASCII

Introdução

O método upcase / downcase para strings ASCII funciona muito bem.

"turtle".upcase      
=> "TURTLE"

"TURTLE".downcase
=> "turtle"

Problema

=
A tradução polonesa de “tartaruga” é “żółw”. Vamos tentar aumentar:

"żółw".upcase       
=> "żółW"

E quanto ao downcase?

"ŻÓŁW".downcase
=> "ŻÓŁw"

Como podemos ver, o método upcase / downcase não funciona corretamente para strings contendo caracteres não ASCII.

Solução

Rails nos fornece um método útil – mb_chars .

"żółw".mb_chars.upcase
=> "ŻÓŁW"
"ŻÓŁW".mb_chars.downcase
=> "żółw"

Agora funciona!

Clique aqui para ler mais sobre mb_chars .