2016-12-11 3 views
0

Я не смог обновить информацию о пользователях в соответствии с предлагаемыми процедурами на собственной странице разработчика. Когда я нажимаю кнопку «Обновить» в форме, она перенаправляет обратно на пользователя/показ, ничего не обновляя. Журналы на консоли показывают, что действие RegistrationsController#update было вызвано действием update_resource из моего пользовательского регистрационного контроля.Rails devise can't update User model fields

журналы:

работы PATCH "/ пользователи" для 127.0.0.1 в 2016-12-11 18:34:51 +0200 Обработка по RegistrationsController обновление # как HTML Параметры: { "utf8" => "✓", "authenticity_token" => "5vqLuQKyuJIoCx0mYfBUhIQmvS0Il5jy + ty1f2XDsehJM4i3M8mMPK5tdPpVQ6MFHIj05ZcRKO7rhlxroM75pQ ==", "user" => {"first_name" => "Birhanu", "last_name" => "Hailemariam2", "email" => "birhanuh4 @ gmail.com "," password "=>" [FILTERED] "," password_confirmation "=>" [FILTERED] "," current_password "=>" [FILTERED] "}," commit "=>" Обновить пользователя "} Пользовательская загрузка (0,7 мс) SELECT «пользователи». * FROM «пользователи» WHERE «пользователи». «Id» = $ 1 ORDER BY «users». «Id» ASC LIMIT 1 [[«id», 1]] Учетная запись (0,4 мс) ВЫБРАТЬ «общедоступные». «Учетные записи». * ОТ «общедоступных». «Учетных записей» ГДЕ «общедоступные». «Учетные записи». «Subdomain» = $ 1 LIMIT 1 [[«subdomain», "test3"]] Пользовательская нагрузка (0,4 мс) SELECT "users". * FROM "users" WHERE "users". "id" = $ 1 LIMIT 1 [["id", 1]] (0.3ms) BEGIN (0.7ms) SELECT COUNT (*) FROM "пользователи" (0.3ms) откатить перенаправлено в http://test3.lvh.me:3000/users/1 завершенного 302 Найдено в 120 мс (ActiveRecord: 4.5ms)

работы GET "/ пользователи/1" для 127.0.0.1 на 2016-12-11 18:34:51 +0200

просмотров/разработать/регистраций/edit.slim

= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| 
      = f.input :first_name, autofocus: true 
      = f.input :last_name, autofocus: true 
      = f.input :email, autofocus: true 

      - if devise_mapping.confirmable? && resource.pending_reconfirmation? 
      div 
       |Currently waiting confirmation for: = resource.unconfirmed_email 

      .form-actions.col-sm-offset-3.m-b-xs  
      i 
       |(leave blank if you don't want to change it) 
      = f.input :password, autocomplete: "off" 

      = f.input :password_confirmation, autocomplete: "off" 

      .form-actions.col-sm-offset-3.m-b-xs  
      i 
       |(we need your current password to confirm your changes) 
      = f.input :current_password, autocomplete: "off" 

      .form-actions.form.col-sm-offset-3 
      => link_to I18n.t('button.cancel'), :back, class: 'btn btn-primary btn-outline' 
      = f.button :submit, class: 'btn btn-primary' 

Контроллер/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    protected  
    def update_resource(resource, user_params) 
    resource.update_with_password(user_params) 
    end 

    def after_update_path_for(resource) 
    current_account 
    end 

end 

Контроллеры/application_controller.rb

class ApplicationController < ActionController::Base 
    . 
    . 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 
    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:accept_invitation, keys: [:first_name, :last_name]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :email, :password, :password_confirmation, 
     :current_password]) 
    end 
    . 
    . 
end 

маршруты:

devise_for :users, controllers: { registrations: 'registrations' } 
+0

Вы обновили свои маршруты, чтобы переопределить контроллер регистрации приложений? –

+0

Да, я настроил маршрут к контроллеру регистрации клиента. –

+0

. Проблема в том, что вы не дадите ей новый пароль? – MZaragoza

ответ

0

Я справляюсь d, чтобы найти то, что вызывало проблему. Это потому, что у меня есть частный метод, возвращающий значение false в значение before_save Обратный вызов ActiveRecord. Источник Факт: enter link description here

Предыдущая версия:

private 
    def set_admin 
    self.admin = User.count == 0 
    end 

Это должно быть изменено, чтобы вернуть nil в случае ложного значения.

private 
    def set_admin 
    self.admin = User.count == 0 
    nil 
    end 

Теперь все работает, я могу обновить информацию о пользователе!