关于在RegistrationController中添加:current_password属性是否正确的问题?
include ActiveModel::ForbiddenAttributesProtection
# app/model/user.rb
class User < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
继承自Devise密码控制器的密码控制器
# 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
继承自Devise注册控制器的注册控制器
# 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
设计路线以使用指定用户&#39;密码和注册控制器。
# 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 :(得分:2)
我相信你的方法是正确的。至少看起来其他人也在使用它。
https://gist.github.com/kazpsp/3350730/#comment-833882 https://gist.github.com/bluemont/e304e65e7e15d77d3cb9
我怀疑你已经遇到过这种情况,但我想我会回答为将来可能会发现这个问题的其他人。
编辑:由于问题(和我的答案)是专门针对添加的适当性:控制器级别的current_password与模型(不确定你甚至是后者如何),我的答案的原始部分仍然站立。然而,看起来Devise的最新版本(至少从3.0.0.rc开始)已经消除了覆盖resource_params的能力,有利于将该方法拆分为几个更具体的方法,如sign_up_params,create_account_params等更精细粒度控制。虽然我确实让我的应用程序单独覆盖了这些新方法,但似乎在设计README上描述并且引用here的“before_filter”(rails 4中的before_action)方法是首选方法,并且也可能更易于维护。