我正在尝试将用户设置为管理员,方法是:
def set_user_admin
if admin_true? == true
user = User.find(params[:format])
if user == nil
redirect_to managements_path
else
user.update_attributes(admin: true, assistant: true,
businessman: true)
redirect_to managements_path
flash[:notice] = "The user #{user.name} is an admin user now"
end
else
end
end
该方法运行良好,但未保存在数据库中。某些验证正在停止操作。然后我在终端中运行命令:
u = User.find_by_id(3)
u.update_attributes(admin: true)
(0.1ms) rollback transaction
=> false
u.errors
@messages={:password=>["Choose a password", "Your password must be at least 4 characters
"], :password_confirmation=>["You must confirm your password
"]}
因此,我无法以管理员身份更新用户,因为在操作中调用了密码验证。
有谁知道为什么在update_attributes中调用密码和update_password验证?我不明白为什么
update_attributes
方法在对象上使用参数perform_validations = true
调用save
方法(在您的情况下user
)。因此,用户拥有的任何验证模型都将在调用update_attributes
方法后执行。这是自然的行为。
为了不执行验证,您可能需要使用update_attribute
方法。它调用带有参数save
的方法perform_validations = false
更新
update_attribute
在 rails 4 中已弃用,因此您可能会找到可用的update_column
update_attributes
方法触发模型验证和回调。尝试update_column
方法而不是update_attributes
方法。