Ruby on Rails update_attibutes无法正常工作



我正在尝试将用户设置为管理员,方法是:

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方法。

相关内容

  • 没有找到相关文章

最新更新