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 && Cellular jest źle (ale w firebugu widzę, że jednak leci && więc serwer dostał dobrą wartość).
Na wiki kaza uzywac wlasnie escape() przy wlaczaniu jakichkolwiek wartosci do zapytania ajax.