ユーザーのexpというカラムを更新する瞬間なぜかパスワードのバリデーションで引っかかってしまい更新できません。試しにバリデーションを外したら、更新できました。パスワードのバリデーションを外すのは本意ではないので他に何かやり方があるでしょうか?
バリデーションの記述
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :tasks validates :name, :email, presence: true validates :name, length: { maximum: 6 } validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{6,100}\z/i} end
更新をする際の記述
def update @task = Task.find(params[:id]) # タスクのポイントを確定 @task.update(task_params) # userを確定 @user = current_user @level = Level.find_by(number: @user.player_level + 1) # userの今の経験値が入る @tmp_exp = @user.exp # 今現在の経験値 + 今回の経験値 @total_exp = @tmp_exp + @task.point_id # ユーザーのトータル経験値を保存 @user.update(exp: @total_exp) binding.pry # レベルアップ処理 if @level.threshold <= current_user.exp @user.player_level += 1 @user.save end redirect_to root_path end
binding.pryで止めた時のエラーメッセージ
回答1件
あなたの回答
tips
プレビュー