与Rails和设计参数强(Strong parameters with Rails and Devi

2019-09-01 23:32发布

我现在用的导轨以及红宝石2.0.0p0和Rails 4.0.0.beta1制定的4.0分支。

这是如果我做正确的方式在那里我检查了样的问题,或者有其他的事情我应该做的。 我敢肯定,很多人都移动到Rails的4.0都面临着同样的问题(在google搜索类似的东西)。

我已阅读以下链接:

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

现在,使用设计我创建了一个用户模式,我创建使用上述学家以下控制器(并提出一定要包括它在我的路线文件)。 我额外的参数是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”,但总是在我的服务器日志给“未经许可的参数”的错误。

Answer 1:

感谢您对设计的Rails4分支的最新更新,它并没有真正需要插入“resource_params”。

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

但是有一个修改要点,让你一些额外的细节在允许的参数方面,如果你需要:

来源: 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


Answer 2:

对于Rails的5,设计出4使用这样的:

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

参考



Answer 3:

它的工作原理很不错,在增加一个模块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


文章来源: Strong parameters with Rails and Devise