2017-01-08 97 views
1

我想設置一個用戶爲管理員,其方法是: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中調用password和update_password驗證?我不明白爲什麼

+0

不,不,格式返回對象。當我打印時:flash [:notice] =「用戶#{user.name}現在是管理員用戶」我收到正確的名稱。 –

+0

可以將您的模型文件發佈給用戶驗證的地方 – user3775217

回答

1

update_attributes方法調用save方法與對象的參數perform_validations = trueuser你的情況)。因此,在調用update_attributes方法後,將執行任何驗證模型用戶。這是自然的行爲。

爲了不執行驗證,您可能需要使用update_attribute方法。它調用save方法與參數perform_validations = false

更新

update_attribute在軌道4,5已經過時,所以你可能會發現可用update_column代替

+0

謝謝。我只是將「user.update_attributes」更改爲「user.update_columns」,它工作得很好。 –

+0

很高興你的問題解決了! – VAD

0

update_attributes方法觸發模型驗證和回調。嘗試update_column方法而不是update_attributes方法。