前提
ユーザーコントローラーでユーザー名を更新するアクションを下記のように記述しています。
ruby
1class UsersController < ApplicationController 2 def update 3 @user = User.find(params[:id]) 4 @user.update!(user_params) 5 render json: @user 6 end 7 8 private 9 def user_params 10 params.permit(:name) 11 end 12end
発生している問題・エラーメッセージ
Postmanでupdateアクションを実行すると、下記のエラーメッセージが表示されます。
#<ActiveRecord::RecordInvalid: Validation failed: password 英数字8文字以上>
"英数字8文字以上"はpasswordのバリデーションに設定した、エラーメッセージです。
実現したいこと
エラーを解決し、ユーザー名を更新できるようにしたいです。
該当のソースコード
models/user.rb
ruby
1class User < ApplicationRecord 2 has_secure_password 3 4 validates :name, length: { minimum: 1, maximum: 10 } 5 validates :password, format: { with: /\A[a-z\d]{8,100}+\z/i, 6 message: "英数字8文字以上" } 7end
db/migrate/..._create_users.rb
ruby
1class CreateUsers < ActiveRecord::Migration[6.0] 2 def change 3 create_table :users do |t| 4 t.string :name, :default => "foo" 5 t.string :password_digest, null: false 6 7 t.timestamps 8 end 9 end 10end
config/route.rb
ruby
1Rails.application.routes.draw do 2 resources :users 3end
試したこと
パスワードのバリデーションを外すと、ユーザー名を更新してデータベースに保存することができました。
また、updateメソッドの!
を記述せずアクションを実行したところ、レンダーしたjsonには更新したユーザー名が反映されていました。
しかし、getメソッドでユーザー情報を取得したところ名前が更新されていなかったので、データベースには保存できていないようでした。
補足情報(FW/ツールのバージョンなど)
- rails 6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/31 11:00