我试图找出如何向用户表添加标签并跳过验证(密码等)或其他内容。
user.rb
class User < ActiveRecord::Base
authenticates_with_sorcery!
validates_confirmation_of :password
validates_presence_of :password, :on => :create
validates :password, length: { in: 6..20 }
acts_as_taggable_on :tags
end
settings_controller.rb
class SettingsController < ApplicationController
def add_tag
current_user.tag_list.add(params[:name])
current_user.save!
redirect_to :back
end
end
然后我得到错误验证Validation failed: Password is too short (minimum is 6 characters)
。怎么解决这个问题?
答案 0 :(得分:2)
卸下:
validates :password, length: { in: 6..20 }
来自模特。
您的密码有以下两种验证:
validates_presence_of :password, :on => :create
validates :password, length: { in: 6..20 }
第一个:validates_presence_of :password, :on => :create
将确保您create
用户时出现密码。如果密码不存在,则不允许创建用户。
第二个验证:validates :password, length: { in: 6..20 }
将确保密码长度必须介于6到20之间。
因此,如果您想向现有用户添加标签,即更新用户,那么您只需删除此验证:validates :password, length: { in: 6..20 }
或仅在create
上执行此验证:
validates :password, length: { in: 6..20 }, :on => :create
这样,当您更新用户时它不会失败,并且validaiton仅适用于create
操作,并且允许您更新记录而不会失败。