Rails和Devise强大的参数

我正在使用devise的轨道4.0分支与ruby2.0.0p0和Rails 4.0.0.beta1。

这是一个问题,我正在检查我是否按照正确的方式进行,或者如果有其他事情我应该做。 我相信很多转向Rails 4.0的人都面临同样的问题(在Google上search类似的东西之后)。

我已阅读以下链接:

  • devise和强大的参数
  • https://gist.github.com/kazpsp/3350730
  • https://github.com/plataformatec/devise/tree/rails4#strong-parameters

现在使用devise我创build了一个用户模型,我使用上面的要点创build了以下控制器(并确保将其包含在我的路线文件中)。 我的额外参数是first_name和last_name。

class Users::RegistrationsController < Devise::RegistrationsController def sign_up_params params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) end def account_update_params params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password) end private :sign_up_params private :account_update_params end 

还有什么我应该做的? 这是从现在开始做事情的最佳方式(自从删除attr_accessor之后)。 我的表格似乎工作正常(新的和更新)。 要点说使用“resource_params”,但总是在我的服务器日志中给“未经许可的参数”错误。

感谢Devise的Rails4分支的最新更新,它并不需要插入'resource_params'。

我创build了一个全新的Rails4应用程序,并遵循基本的devise安装步骤,我的应用程序正常工作,所以我认为,你做得很好。

但是有一个修改的要点,如果您需要的话,可以根据允许的参数给出一些额外的细节:

资料来源: https : //gist.github.com/bluemont/e304e65e7e15d77d3cb9

 # controllers/users/registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController before_filter :configure_permitted_parameters protected # my custom fields are :name, :heard_how def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) do |u| u.permit(:name, :heard_how, :email, :password, :password_confirmation) end devise_parameter_sanitizer.for(:account_update) do |u| u.permit(:name, :email, :password, :password_confirmation, :current_password) end end end 

对于Rails 5,devise4使用这个:

 class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation]) end end 

参考

它在config/initializers器中添加一个像这样的所有parameters的模块非常好

 module DevisePermittedParameters extend ActiveSupport::Concern included do before_filter :configure_permitted_parameters end protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) } end end DeviseController.send :include, DevisePermittedParameters