うちのいぬ Tech Blog

Tech Blog of Uchinoinu/My dog

422 error at creating User record in User Model using Devise

症状

RailsJSON 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"}%

References