J'essaie donc d'utiliser une aide URL Rails (page_url
) pour créer des URL qui contiennent des caractères spéciaux, y compris des esperluettes. La plupart des cas de travail comme vous le feriez attendez à:Rails url helper ne pas encoder les esperluettes
(rdb:1) page_url('foo', :host => 'host')
"http://host/pages/foo"
(rdb:1) page_url('foo_%_bar', :host => 'host')
"http://host/pages/foo_%25_bar"
Mais pour une raison étrange, esperluette ne sont pas échappés:
(rdb:1) page_url('foo_&_bar', :host => 'host')
"http://host/pages/foo_&_bar"
Et si je les pré-évasion, ils sont endommagés:
(rdb:1) page_url('foo_%26_bar', :host => 'host')
"http://host/pages/foo_%2526_bar"
CGI::escape
, d'autre part, leur échappe bien:
(rdb:1) CGI::escape('foo_&_bar')
"foo_%26_bar"
Que se passe-t-il et comment puis-je contourner ce problème? (Avec quelque chose de plus beau que gsub('&', '%26')
, c'est-à-dire.)
Hmmm .. Je ne trouve pas d'aide-rails spécifiquement nommée page_url (consulté sur le site web d'apidock) - êtes-vous sûr que c'est le bon nom de méthode? Voulez-vous dire url_for à la place? –
J'ai un ActiveRecord appelé "page", l'assistant _url pour cela est créé automagiquement. – jpatokal
Ah - c'est vrai. Cela n'est pas apparu dans votre description :) –