Zwalona obsługa params

Znalazłem dosyć paskudny błąd w implementacji Railsów. Otóż parser przetwarzający dane przekazywane z formularza za pomocą AJAX nie wyłapuje encji & jako jednego znaku. W efekcie nie jest możliwe przekazanie z formularza żadnej wartości zawierającej znak ampersanda.

Przykładowo mam pole “agents” o wartości “C & Cellular”. Po wysłaniu Ajaksem mamy zmienną params o wartości:

Parameters: {"agents"=>"C ", "action"=>"changed_agents", "controller"=>"activity", " C Cellular"=>""}

Zawartość jest zupełnie bez sensu. Nie wiem gdzie ukrywa się implementacja tworząca params. Szukanie czegoś w Ruby to jak igły w stogu siana, niestety. Ewidentnie jest tu zwalony kod.

Zamiast grzebać w kodzie źródłowym RoR (ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/cgi_ext/cgi_methods.rb, metoda parse_query_parameters) jest lepsze rozwiązanie. W JavaScript jest funkcja escape() która rozwiązuje ten problem. Np. wywołując remote_function() z parametrem :with => “‘field=’+[b]escape/b”.

Nie mogąc uwierzyć w to co napisałeś przetestowałem to i… działa prawie dobrze. Po stronie serwera jest ok, ale jeśli zrobię update przez rjs htmla to już niekoniecznie. http://radarek.pl/test/test. Dla C & Cellular jest ok, ale już dla C &amp& Cellular jest źle (ale w firebugu widzę, że jednak leci &amp& więc serwer dostał dobrą wartość).

Na wiki kaza uzywac wlasnie escape() przy wlaczaniu jakichkolwiek wartosci do zapytania ajax.