2017-06-01 55 views
0

我正在使用Devise和Ruby on Rails,並且我想設置一個編輯用戶的視圖,只有當我想要提供當前密碼時一個新的密碼。換句話說 - 如果我想更改我的名字或生日,我可以簡單地將密碼字段留空,但如果我想更改密碼,我希望具有標準設計行爲。

我的編輯形式如下: view編輯在一個視圖中設計用戶並僅需要某些字段的密碼

我試圖讓沒有密碼更新爲通過重寫update_resource方法寫入here

protected 

def update_resource(resource, params) 
    resource.update_without_password(params) 
end 

但是,如果沒有從params.require(:user).permit(...)刪除current_password我收到以下錯誤:

error

我無法從允許的參數中刪除它,因爲我想在密碼更改的情況下使用它。

這樣做會怎樣?我正在考慮拆分視圖並創建一個用於密碼編輯的新窗體以及用於密碼編輯的控制器,但我更願意將它們全部放在一個地方。

+1

我的答案能解決問題嗎? – Pavan

+0

是的,絕對!我寫了一篇評論,其中我感謝你,我想我沒有點擊'添加評論'-_-你的回答非常有幫助,而且直截了當:)我只做了一些升級,將代碼替換爲「else 「和」結束「只是」超級「:) – bochen421

+0

很高興聽到!隨時接受我的回答:) – Pavan

回答

1

unknown attribute 'current_password' for User

錯誤是有道理的current_password不是一個默認的自帶的設計用戶屬性可用。我有類似的問題,我已經解決它的幫助下attr_accessor

user.rb模型把attr_accessor :current_password。這解決了錯誤,但是您需要調整下面的參數以滿足兩種情況

def update_resource(resource, params) 
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 
    resource.update_without_password(some_params) 
    else 
    resource.update_with_password(some_params) 
    end 
end 

def some_params 
    params.require(:user).permit(--all params here with current_password also included--) 
end 
相關問題