2017-01-10 63 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屬性尋找簡單和容易再試試吧, 在應用程序控制器添加希望它會幫助你。