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
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.
Comentários muito úteis
Você precisa adicionar a seguinte linha a
config/initializers/mime_types.rb
Mime::Type.register "application/vnd.api+json", :json