Ruby Rails update_attibutes 不工作
Ruby on Rails update_attibutes not working
我想设置一个用户为管理员,方法是:
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
方法。它使用参数 perform_validations = false
调用 save
方法
更新
update_attribute
在 rails 4 中已弃用,因此您可能会发现 update_column
可用
update_attributes
方法触发模型验证和回调。尝试 update_column
方法而不是 update_attributes
方法。
我想设置一个用户为管理员,方法是:
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
方法。它使用参数 perform_validations = false
save
方法
更新
update_attribute
在 rails 4 中已弃用,因此您可能会发现 update_column
可用
update_attributes
方法触发模型验证和回调。尝试 update_column
方法而不是 update_attributes
方法。