2017-01-10 36 views
0

我的用户有name以及电子邮件,密码等常规设计列。我希望用户能够编辑自己的帐户设置 - 包括他们的名字 - 在/users/edit ,作为registrations的一部分,Devise为我们提供了开箱即用的功能。用现有的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

干杯。我最终将它添加到'application_controller'而不是初始化程序。 –

+0

将它添加到'application_controller'将会诀窍,但同时它会让你的控制器笨拙。将它添加到单独的初始化程序中,可以轻松读取/配置,并保持控制器代码的清洁。无论如何,最后的电话是你的:) – 31piy

0

如果你是下面的代码片段将在强大的参数列表

# 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 

添加name属性寻找简单和容易再试试吧, 在应用程序控制器添加希望它会帮助你。