2017-01-08 4 views
1

Я пытаюсь установить пользователя в качестве администратора, метод:Рубин на 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? Я не понимаю, почему

+0

Нет нет,: формат возвращает объект. Когда я печатаю: flash [: notice] = «Пользователь # {user.name} теперь является пользователем admin« Я получаю правильное имя. –

+0

может размещать ваш файл модели для пользователя, где написаны валидации. – user3775217

ответ

1

update_attributes метод вызова save метода с параметром perform_validations = true на объекте (user в вашем случае). Таким образом, любая модель валидации пользователя будет выполнена после вызова метода update_attributes. Это естественное поведение.

Чтобы не выполнять проверки, вы можете использовать метод update_attribute. Он вызывает save метод с параметром perform_validations = false

обновления

update_attribute осуждаются в рельсах 4, так что вы можете найти полезную update_column вместо

+0

Спасибо. Я просто меняю «user.update_attributes» на «user.update_columns», и он работает нормально. –

+0

Рад, что ваша проблема решена! – VAD

0

update_attributes метод триггеров модели валидации и обратных вызовы. Попробуйте update_column метод вместо update_attributes метод.