2016-12-11 40 views
0

我無法按照設計自己的頁面上的建議步驟更新用戶信息。當我單擊表單中的更新按鈕時,它將重定向回到用戶/顯示而不更新任何內容。控制檯上的日誌顯示RegistrationsController#update操作被調用,而不是我的自定義RegistrationController中的update_resource操作。Rails設計無法更新用戶模型字段

日誌:

開始PATCH 「/用戶」 爲127.0.0.1,在2016年12月11日十八時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.7ms)SELECT「users」。* FROM「users」WHERE「users」。「id」= $ 1 ORDER BY「users」。「id」ASC LIMIT 1 [[「id」, 1]] 帳戶負載(0.4ms)選擇「公共」。「帳戶」。*從「公共」。「帳戶」在哪裏「公共」。「帳戶」。「子域」= $ 1 LIMIT 1 [[「subdomain」, 「test3」]] 用戶負載(0.4ms)SELECT「users」。* FROM「users」WHERE「users」。「id」= $ 1 LIMIT 1 [[「id」,1]] (0.3ms)BEGIN (爲0.7ms)SELECT COUNT(*)FROM 「用戶」 (0.3ms的)ROLLBACK 重定向到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 

現在一切正常,我可以更新用戶信息!