2016-11-29 33 views
7

Mam problem podczas wysyłania params kontroler, który wyglądać tak:Szyny 5 z params obiekt mający pustych tablic jako wartości są odrzucane

{ id: "1", stuff: {"A" => [], "B" => [], "C" => [], "D" => []} } 

Sposób widzi { id: "1" } tylko i cała stuff parametr jest upuszczony .

Można to zmienić, jeśli w tablicach znajdują się dowolne wartości. Ale powiedzieć, że są wartości we wszystkich tablic z wyjątkiem klucza "C", zostaną one tam oprócz "C" jak:

{ id: "1", stuff: {"A" => ["1"], "B" => ["2", "3"], "D" => ["4"]} } 

spadam do tego problemu modernizacji z Rails 4.2.x -> 5.0.0 Wszelkie sugestie na temat tego, co się tutaj dzieje? Widziałem kilka artykułów/problemów około munging parameters, ale nie jestem pewien, czy to jest problem, ponieważ w ich przykładowej tabeli, jak działa munging {person: []} staje {person: nil}, gdzie osoba param nie jest całkowicie upuszczona.

Odpowiedz

6

Od @sgrif we wspólnocie GH:

Jest to oczekiwane zachowanie. Nie ma sposobu na zakodowanie pustej tablicy przy użyciu formularza HTML (np. Content-Type: kodowanie w url-formularzu). powodem, dla którego testy przeszły w Railsach 4.2, jest to, że testy kontrolerów spowodowały, że nie zakodowały swoich parametrów, po prostu przekazały skrót bezpośrednio przez . W Railsach 5 koduje je. Jeśli kontroler dba o puste tablice , prawdopodobnie masz do czynienia z żądaniami JSON. Ty możesz zrobić to w swoim teście jako: json. Jeśli masz do czynienia tylko z wprowadzeniem formularza , nigdy nie otrzymasz pustej tablicy.

Dodawanie as: :json nie skończyć pracę dla mnie, ale dodanie @request.headers["Content-Type"] = 'application/json' na początku badania było.

+0

Dzięki, że ulepszenie nagłówka robi dla mnie również sztuczkę. Czy mamy jakąkolwiek wskazówkę, dlaczego:: json rozwiązanie nie działa? – Andrew

+0

Wcale tego nie wkurzyłem, przepraszam. – Luke

+0

Dzięki za podzielenie się tym! –