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 = truesave 方法(在您的情况下为 user)。因此,用户拥有的任何验证模型都将在调用 update_attributes 方法后执行。这是自然行为。

为了不执行验证,您可能需要使用 update_attribute 方法。它使用参数 perform_validations = false

调用 save 方法

更新

update_attribute 在 rails 4 中已弃用,因此您可能会发现 update_column 可用

update_attributes 方法触发模型验证和回调。尝试 update_column 方法而不是 update_attributes 方法。