2016-11-29 3 views
7

У меня возникли проблемы при отправке контроллера Params, который выглядит следующим образом:Rails 5 PARAMS с объектом, имеющим пустые массивы в качестве значений отбрасываются

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

Метод видит только { id: "1" } и весь stuff параметр упал ,

Это может быть изменено, если в массивах есть значения. Но говорят, что есть значения во всех массивах, за исключением для ключа "C", все они будут там помимо "C" как:

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

Я падаю в эту проблему обновления с Rails 4.2.x -> 5.0.0 Любые предложения о том, что здесь происходит? Я видел несколько статей/выпусков около munging parameters, но я не уверен, если это проблема, потому что в их примерной таблице, как работает munging, {person: []} становится {person: nil}, где персональный параметр не полностью отбрасывается.

ответ

6

От @sgrif в сообществе GH:

Это ожидаемое поведение. Невозможно закодировать пустой массив , используя форму HTML (например, Content-Type: url-form-encoded). Причина, по которой ваши тесты прошли в Rails 4.2, заключается в том, что тесты контроллера не кодируют их параметры, они просто передают хэш через напрямую. В Rails 5 он кодирует их. Если ваш контроллер заботится о пустых массивах , вполне вероятно, что вы имеете дело с запросами JSON. Вы можете сделать это в своем тесте с:: json. Если вы используете только ввод формы , вы никогда не получите пустой массив.

Добавление as: :json не в конечном итоге работает для меня, но с добавлением @request.headers["Content-Type"] = 'application/json' в начале теста делали.

+0

Спасибо, что настройка заголовка делает трюк для меня тоже. У нас есть какая-то подсказка, почему: :: решение json не работает? – Andrew

+0

Я не поддался на это, извините. – Luke

+0

Спасибо, что поделились этим! –