2017-01-10 3 views
0

Мои пользователи имеют name наряду с регулярными столбцами, такими как электронная почта, пароль и т. Д. Я бы хотел, чтобы пользователи могли редактировать свои собственные настройки учетной записи, включая их имя, - /users/edit , который, к счастью, предлагает нам из коробки как часть registrations.Обновление пользовательских атрибутов с помощью существующих пользователей Devise/редактирования функциональности

Я добавил name вход на представление (упрощенный здесь):

= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| 
    = f.input :name, required: false 
    = f.input :email, required: true 
    = f.input :password, autocomplete: 'off', required: false 
    = f.input :password_confirmation, required: false 
    = f.submit 'Save' 

Это делает имя правильно в форме, и я могу редактировать и сохранять, однако имя не обновляется, а другие вещи , Я представил себе, что Devise просто возьмет то, что params находится в форме, и обновите resource с этими параметрами независимо от того, кем они были, но это, похоже, не так.

Я получил это работает переопределение контроллера (опять же только самым важным код показан):

class RegistrationsController < Devise::RegistrationsController 
    def update 
    resource.name = params[:user][:name] 
    resource.save 
    super 
    end 
end 

Это работает хорошо, но есть более простой, встроенный способ сделать это я пропускаю ?

ответ

1

Да, есть более простой способ. Создайте новый инициализатор, предпочтительно config/initializers/devise.rb, и напишите в нем допустимые параметры. Базовая конфигурация выглядит следующим образом:

# frozen_string_literal: true 
module DevisePermittedParameters 

    extend ActiveSupport::Concern 

    included do 
    before_action :configure_permitted_parameters 
    end 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:name]) 
    end 

end 

DeviseController.send :include, DevisePermittedParameters 

Он позволяет модульную конфигурацию разрешающих пользовательских параметров. Вы можете найти более подробную информацию об этом here.

+1

Cheers. Я закончил тем, что добавил его в 'application_controller', а не в инициализатор. –

+0

Добавление его в 'application_controller' будет делать трюк, но в то же время он делает ваш контроллер неуклюжим. Добавление этого в отдельный инициализатор упрощает чтение/настройку и сохраняет код контроллера чистым. В любом случае, окончательный звонок - ваш :) – 31piy

0

, если вы ищете простой и легкий затем попробовать, В Application контроллера оных следующий фрагмент кода, который добавит ваш атрибут name в прочном списке параметров

# app/controllers/application_controller.rb 

    before_action :configure_permitted_parameters, if: :devise_controller? 
    protected 

     def configure_permitted_parameters 
      devise_parameter_sanitizer.for(:account_update) << :name 
     end 

надеюсь, что это поможет.

Смежные вопросы