422 error at creating User record in User Model using Devise
症状
RailsでJSON API用のバックエンド(管理画面はactive adminを利用し、そこだけはhtmlを利用)を作っています。 認証周りにDeviseを利用しました。 Routingは↓な感じで。
# config/routes.rb namespace :api, format: 'json' do namespace :v1 do devise_for :users, controllers: { sessions: 'api/v1/users/sessions', registrations: 'api/v1/users/registrations', passwords: 'api/v1/users/passwords' } end end
で以下の様なテストをしました。
$ curl -H "Content-Type: application/json" -d '{"user":{"email":"hoge@hoge.hoge","password":"12345678"}}' -X POST http://localhost:3000/api/v1/users
結果↓
{"errors":{"email":["can't be blank"],"password":["can't be blank"]}}
対応
# app/controllers/api/v1/registration_controller.rb def sign_up_params params.require(:user).permit(:email, :password, :password_confirmation) end def create build_resource(sign_up_params) super end
createは自前でコードを書いてもいいのですが、とにかくこれでうまくいきました。
curl -H "Content-Type: application/json" -d '{"user":{"email":"hoge@hoge.hoge","password":"12345678"}}' -X POST http://localhost:3000/api/v1/users {"id":1,"email":"hoge@hoge.hoge","authentication_token":null,"created_at":"2015-04-12T09:41:31.842Z","updated_at":"2015-04-12T09:41:31.881Z"}%