1

有關在RegistrationController中是否添加:current_password屬性的正確方法是否正確?具有以下設計的強參數:current_password屬性

用戶模型include ActiveModel::ForbiddenAttributesProtection

# app/model/user.rb 

class User < ActiveRecord::Base 
include ActiveModel::ForbiddenAttributesProtection 

密碼控制器,其從設計的密碼控制器繼承

# app/controllers/users/passwords_controller.rb 

class Users::PasswordsController < Devise::PasswordsController 
    def resource_params 
    params.require(:user).permit(:email, :password, :password_confirmation) 
    end 
    private :resource_params 
end 

註冊控制器,其從設計的註冊控制器繼承

# app/controllers/users/registrations_controller.rb 

class Users::RegistrationsController < Devise::RegistrationsController 
    def resource_params 
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :current_password) 
    end 
    private :resource_params 
end 

路線爲設計使用指定的用戶s的密碼和註冊控制器。

# config/routes.rb 

devise_for :users, :controllers => {:registrations => "users/registrations", :passwords => "users/passwords"} 

RegistrationsController我不得不添加屬性:current_password讓用戶能夠編輯自己的個人資料。

我問的原因是沒有strong_parameters我只會指定一個attr_accessible:email, :password, :password_confirmation, :remember_me

任何見解都非常感謝。

+0

不知道這是否是最好的方法,難道你不想把它放在用戶級而不是註冊級? – jfvanderwalt

回答

2

我相信你的方法是正確的。至少似乎其他人也在使用它。

https://gist.github.com/kazpsp/3350730/#comment-833882 https://gist.github.com/bluemont/e304e65e7e15d77d3cb9

我懷疑你已經遇到這個了,但想我會回答其他人誰可能會發現,今後這一問題的緣故。

編輯:由於問題(和我的答案)是專門針對在控制器級別與模型添加current_password的適當性(不知道你怎麼做後者),我的答案的原始部分仍然站立。然而,似乎Devise的最新mod(至少從3.0.0.rc開始)已經消除了覆蓋resource_params的能力,有利於將該方法拆分爲幾個更具體的方法,比如sign_up_params,create_account_params等,以獲得更好的粒度控制。雖然我確實讓我的應用程序單獨工作覆蓋這些新方法,但似乎在設計README中描述的「before_filter」(在rails 4中的before_action)方法,並且參考here是首選方法,並且可能更易於維護。