Сильные параметры Rails 5 не позволяют UploadedFile - PullRequest
1 голос
/ 28 апреля 2019

Я портирую приложение Rails 4 на Rails 5 и испытываю странное поведение с сильными параметрами и Rack::Test::UploadedFile. У меня есть тест / контроллер, который делает что-то вроде этого:

# The test
post images_url, as: :json, params: {
    image: {
        image: Rack::Test::UploadedFile.new(foo)
    }
}
# The controller
def image_params
    params.require(:image).permit(:image)
end

В соответствии с документацией , только разрешенные скаляры проходят фильтр, и явный список типов включает Rack::Test::UploadedFile. Пока все хорошо.

Кроме ... это не работает. Это отфильтровывается. Если я добавлю puts params к контроллеру, я увижу что-то вроде {"image"=>{"image"=>{"original_filename"=>"test.jpg", "tempfile"=>"#<File:0x000056493a08dfc0>", "content_type"=>"image/jpeg"}}}. Это хеш, а не UploadedFile. Это подтверждается копанием в коде пакета действий: он заканчивается там как хеш, превращается в другой ActionController::Parameters и не считается скаляром; таким образом, оно отфильтровывается.

Это хорошо работало в Rails 4 с таким тестовым кодом:

post :create, format: :json, image: {
    image: Rack::Test::UploadedFile.new(foo)
}

Я не могу заставить это работать в Rails 5, я что-то упустил? Интересно, что если я уберу as: :json, параметры будут выглядеть правильно (хотя мой контроллер не написан для обработки не-json, поэтому он не работает по другим причинам).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...