質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2294閲覧

password can't be blankが出て新規ユーザーを作成できない

Khy

総合スコア118

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

0クリップ

投稿2020/02/06 06:14

編集2020/02/06 06:51

Rails APIとNuxt.jsを使用しております。

新規ユーザーを作成する機能を実装したいのですが、password can't be blankというエラーが出て先に進めません。
パスワードの暗号化にはbcryptを使用しております。

関係していそうなソースは以下の通りです。
rails cでユーザーを作成した場合には問題なくできるのですが、何が原因でしょうか?

  • models/user.rb

rb

1class User < ApplicationRecord 2 has_secure_password 3 4 has_many :pdfs, dependent: :destroy 5 6 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i 7 8 validates :name, presence: true 9 validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX } 10end
  • config/routes.rb

rb

1Rails.application.routes.draw do 2 namespace 'api' do 3 namespace 'v1' do 4 5 namespace :admin do 6 resources :users 7 end 8 9 post 'user_token' => 'user_token#create' 10 get '/users/current' => 'current#index' 11 12 resources :companies, except: [:new, :edit] 13 resources :users, except: [:new, :edit], shallow: true do 14 resources :pdfs, except: [:new, :edit] 15 end 16 17 end 18 end 19end
  • controllers/api/v1/user.rb

rb

1module Api 2 module V1 3 class UsersController < ApplicationController 4 before_action :authenticate_user 5 before_action :set_user, only: [:show, :update, :destroy] 6 7 def index 8 users = User.order(created_at: :desc) 9 render json: { status: 'SUCCESS', message: 'Loaded users', data: users } 10 end 11 12 def show 13 render json: { status: 'SUCCESS', message: 'Loaded the user', data: @user } 14 end 15 16 def create 17 user = User.new(user_params) 18 if user.save 19 render json: { status: 'SUCCESS', data: user } 20 else 21 render json: { status: 'ERROR', data: user.errors } 22 end 23 end 24 25 def destroy 26 @user.destroy 27 render json: { status: 'SUCCESS', message: 'Deleted the user', data: @user } 28 end 29 30 def update 31 if @user.update(user_params) 32 render json: { status: 'SUCCESS', message: 'Updated the user', data: @user } 33 else 34 render json: { status: 'SUCCESS', message: 'Not updated', data: @user.errors } 35 end 36 end 37 38 private 39 40 def set_user 41 @user = User.find(params[:id]) 42 end 43 44 def user_params 45 params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin) 46 end 47 end 48 end 49end 50
  • Nuxt.js

vue

1<template> 2 <v-form> 3 <v-text-field v-model="name" label="名前" /> 4 <v-text-field v-model="email" label="メールアドレス" /> 5 <v-text-field v-model="password" label="パスワード" /> 6 <v-text-field v-model="passwordConfirmation" label="パスワード確認" /> 7 <v-btn @click="createUser">作成</v-btn> 8 </v-form> 9</template> 10 11<script> 12export default { 13 layout: 'admin', 14 data() { 15 return { 16 name: '', 17 email: '', 18 password: '', 19 passwordConfirmation: '' 20 } 21 }, 22 methods: { 23 createUser() { 24 const newUser = { 25 name: this.name, 26 email: this.email, 27 password: this.password, 28 password_confirmation: this.passwordConfirmation, 29 admin: false 30 } 31 32 this.$axios 33 .$post('/users', newUser) 34 .then((res) => { 35 console.log(res) 36 }) 37 .catch((error) => { 38 console.log(error) 39 }) 40 } 41 } 42} 43</script> 44
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinoharat

2020/02/06 08:38

binding.pry などを使って、コントローラの create アクションで params がどういう値になっているか確認し、教えてください。
Khy

2020/02/06 09:07

使ってみたところ、以下のようなパラメーターになっておりました。 `"user"=>{"~~~"}`の部分がおかしいのでしょうか? ``` Processing by Api::V1::UsersController#create as HTML Parameters: {"name"=>"山田 太郎", "email"=>"taro@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "admin"=>false, "user"=>{"name"=>"山田 太郎", "email"=>"taro@gmail.com", "admin"=>false}} User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 980190962], ["LIMIT", 1]] ```
guest

回答1

0

自己解決

https://stackoverflow.com/questions/30632639/password-cant-be-blank-in-rails-using-has-secure-password

上記の記事を参考に、
wrap_parameters :user, include: [:name, :password, :password_confirmation]をコントローラーに追加したら解決いたしました。

投稿2020/02/06 13:07

Khy

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyako

2021/04/09 12:25

自身もpasswordのみが送れずここに辿り着き解決できました。解決方法また文献をを載せてくださりありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問