Bonjour, j’avais précedement écris à propos de la méthode upcase de
ruby, qui ne met pas les caractères accentués en majuscules.
sur ce on m’a proposé un :
chaine.upcase.tr(‘é’,‘Ã?’)
ce qui à priori devrait fonctionner (d’après la doc). Ben en fait non,
chez moi ça marche pas. Rails refuse obstinement de transformer mes
caractères accentués ! via tr ou même tr_s
Bonjour
pour expérimenter, rien de tel qu’un petit test unitaire:
upcase.rb
require ‘test/unit’
class Tests < Test::Unit::TestCase
def test_upcase
assert_equal “Ã?LÃ?PHANT”, “éléphant”.upcase.tr(“é”,“Ã?”)
end
end
lancement
C:\dev\scripts\string>upcase.rb
Loaded suite C:/dev/scripts/string/upcase
Started
.
Finished in 0.0 seconds.
1 tests, 1 assertions, 0 failures, 0 errors
Ca marche bien.
Je suppose que tu fais
chaine.upcase.tr('é",“Ã?”)
et non pas
chaine = chaine.upcase.tr('é",“Ã?”)
ce qui explique peut être cela.
si tu veux modifier le receveur (chaine), utilise chaine.upcase!.tr!
('é",“Ã?”)
a+
Thibaut
ce qui donne pour terminer:
require ‘test/unit’
class Tests < Test::Unit::TestCase
def test_upcase
assert_equal “Ã?LÃ?PHANT”, “éléphant”.upcase.tr(“é”,“Ã?”)
end
def test_destructive_upcase
chaine = “éléphant”
chaine.upcase!.tr!(“é”,“Ã?”)
assert_equal “Ã?LÃ?PHANT”, chaine
end
end
=> 2 tests, 2 assertions, 0 failures, 0 errors
J’ai eu les pires problèmes avec les caractères accentués avant de
m’apercevoir que mon source n’était pas sauvegardé en UTF-8.
Après avoir indiqué à Radrails de m’enregistrer tout en UTF-8 je n’ai
plus
eu de problèmes.
(s’assurer aussi que ruby s’attend à trouver de l’UTF-8)
pour :
<%= bdel_pupil.nom.upcase!.tr!(‘é’, ‘Ã?’) %>
j’obtient ::
NoMethodError in Bdel#list Showing app/views/bdel/list.rhtml
where line #14 raised:
You have a nil object when you didn’t expect it!
The error occured while evaluating nil.tr!
Extracted source (around line #14):
11:
12: (<%= bdel_pupil.age %> ans) -
13:
14: <%=
bdel_pupil.nom.upcase!.tr!(‘�’, ‘�’) %> <%=
bdel_pupil.prenom %>
15: <%= link_to ‘Voir’, :action => ‘show’, :id => bdel_pupil %> |
16:
17: <%= link_to ‘Editer’, :action => ‘edit’, :id => bdel_pupil %>
|
RAILS_ROOT: ./script/../config/..
Thibaut Barrère [email protected] a écrit : ce qui donne pour
terminer:
require ‘test/unit’
class Tests < Test::Unit::TestCase
def test_upcase
assert_equal “Ã?LÃ?PHANT”, “éléphant”.upcase.tr(“é”,“Ã?”)
end
def test_destructive_upcase
chaine = “éléphant”
chaine.upcase!.tr!(“é”,“Ã?”)
assert_equal “Ã?LÃ?PHANT”, chaine
end
end
=> 2 tests, 2 assertions, 0 failures, 0 errors
Railsfrance mailing list
[email protected]
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance
j’ai effectivement tenté sans les accents (j’ai même commencé par là …)
cependant, même en essayant de changer l’encodage du fichier… je
n’arrive pas à transformer mes caractères.
Thibaut Barrère [email protected] a écrit :
bdel_pupil.nom.upcase!.tr!
Sur ton exemple précis, il faut utiliser <%=
bdel_pupil.nom.upcase.tr(… %> (sans les points
d’exclamation)
Je te recommande d’aller regarder la doc de upcase!/upcase et tr/tr!
pour que tu comprennes bien les différences entre ces deux forms.
Railsfrance mailing list
[email protected]
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance
bdel_pupil.nom.upcase!.tr!
Sur ton exemple précis, il faut utiliser <%=
bdel_pupil.nom.upcase.tr(…
%> (sans les points d’exclamation)
Je te recommande d’aller regarder la doc de upcase!/upcase et tr/tr!
pour
que tu comprennes bien les différences entre ces deux forms.