Rails + deviseで会員登録APIを自前で構築する時の肝


controller/api/user_controller.rb
def create
  user = where(email: user_params[:email]).first
    if user
      if user.confirmed?
        fail "already exists"
      else
        user.password = user_params[:password]
        user.send(:generate_confirmation_token!) # protectedメソッドなのでsendを使っている
      end
    else
      user = User.new(
        email: user_params[:email],
        password: user_params[:password]
      )
      user.skip_confirmation_notification!
      user.save!
    end
  confirmation_token = user.instance_variable_get('@raw_confirmation_token')
  confirmation_url = api_user_confirmation_url(user, confirmation_token: confirmation_token)
  UserAppMailer.confirmation_instruction(user, confirmation_url).deliver
  render :success
end

def user_params
  params.require(:user).permit(:email, :password)
end
  1. 新しく作成したUserモデルのインスタンスからconfirmation_tokenを取り出します
  2. userインスタンスと上で取り出したconfirmation_tokenを使ってconfirmationアクションへのurlを作ります
  3. userにconfirmationアクションへのurlをメールで送信します
  4. 成功した旨のJSONレスポンスを返します

これでいけた^ ^