57

我正在使用设计的 rails 4.0 分支以及 ruby​​ 2.0.0p0 和 Rails 4.0.0.beta1。

这是我正在检查我是否以正确的方式做这件事的问题,或者我是否应该做其他事情。我确信很多迁移到 Rails 4.0 的人都面临着同样的问题(在谷歌搜索类似的事情之后)。

我已阅读以下链接:

现在使用设计我创建了一个用户模型,我使用上述要点创建了以下控制器(并确保将其包含在我的路由文件中)。我的额外参数是 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”,但这总是在我的服务器日志中给出“Unpermitted parameters”错误。

4

3 回答 3

66

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

我创建了一个全新的 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
于 2013-05-05T20:58:41.600 回答
29

对于 Rails 5,Devise 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

参考

于 2016-06-06T09:57:29.253 回答
7

像这样 添加一个模块非常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
于 2015-04-01T09:57:18.923 回答