Rails: POST para API Endpoint tem parâmetros vazios

Criado em 24 mar. 2017  ·  3Comentários  ·  Fonte: rails/rails

Params está definido, mas a carga útil da solicitação está sendo perdida.

[1] pry(#<Api::RegistrationsController>)> params
=> <ActionController::Parameters {"format"=>"json", "controller"=>"api/registrations", "action"=>"create"} permitted: false>
[2] pry(#<Api::RegistrationsController>)> params.require(:data)
ActionController::ParameterMissing: param is missing or the value is empty: data
Request Headers

Solicitar cabeçalhos

Host: test.lvh.me:3000
Connection: keep-alive
Content-Length: 1038
Accept: application/vnd.api+json
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Origin: http://test.lvh.me:4200
Content-Type: application/vnd.api+json
Referer: http://test.lvh.me:4200/register/individual-academics
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

Carga útil bruta
{"data":{"attributes":{"first-name":"Test","last-name":"User","email":"[email protected]"}}}

Controlador

      def registration_params
        params.require(:data).permit({
          attributes: [
            'first-name',
            'last-name',
            'email',
            ]
        })
      end

Se eu configurar o mesmo aplicativo usando Rails 4.2.6/Ruby 2.3.3, isso funcionará perfeitamente sem alterações na carga útil, então parece que é algo com a maneira como o Rails 5 trata as solicitações, potencialmente?

Devo também mencionar que a URL de origem é test.lvh.me:4200 (um aplicativo ember) para a API do Rails test.lvh.me:3000, então o CORS pode desempenhar um papel aqui na remoção dos parâmetros? Não estou recebendo nenhum erro, pois os cabeçalhos parecem corretos e o CORS está configurado aqui para permitir qualquer origem via middleware Rack::Cors.

Versão dos trilhos :
Trilhos 5.0.1
Versão do rubi :
Rubi 2.3.3

actionpack needs work

Comentários muito úteis

Você precisa adicionar a seguinte linha a config/initializers/mime_types.rb
Mime::Type.register "application/vnd.api+json", :json

Todos 3 comentários

Olá, crie um caso de teste executável com falha usando https://github.com/rails/rails/blob/master/guides/bug_report_templates/action_controller_gem.rb como modelo para que outros possam reproduzir e ajudá-lo a resolver o problema.

Você precisa adicionar a seguinte linha a config/initializers/mime_types.rb
Mime::Type.register "application/vnd.api+json", :json

Só queria acompanhar @vipulnsward e @ngn01 realmente aprecio essa resposta. Funcionou com sucesso e me ajudou a entender as relações entre tudo.

Esta página foi útil?
0 / 5 - 0 avaliações