使用强参数自定义Devise



我使用的是Rails 4.0.0和Devise 3.0.2,并试图在Devise README中按照此指令使用强参数配置Devise。

我在application_controller.rb 中写了这样的代码

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?
  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :nick
  end
end

然后我参观了http://localhost:3000/users/sign_up。我得到了一个NoMethodError in Devise::RegistrationsController#new,上面写着:

未定义方法<<' for {}:ActionController::Parameters

并指向我写devise_parameter_sanitizer.for(:sign_up) << :nick 的确切位置

我做错了什么吗?谢谢你的帮助。

尝试:

    class ApplicationController < ActionController::Base
      ...
      before_filter :configure_permitted_parameters, if: :devise_controller?   
      ...
      def configure_permitted_parameters
         devise_parameter_sanitizer.for(:sign_up) { |u| 
            u.permit(:email, :password, :password_confirmation, :nick) 
         }
      end

它对我有用!:D

正如Jose Valim所说,这是Devise 3.1.0.rc功能,这就是它不起作用的原因。您必须使用README中的其他语法。

一个问题与您的问题完全匹配:#2574:devise_parameter_sanitizer.for(:sign_up)<lt;:某件事引发了一个错误。

事实上,向这样的强参数添加自定义字段的方法是Devise 3.1的一个新功能。

由于Rubygems.org中的当前版本是3.0.3,因此目前还不能在rails项目中使用此方法。你必须覆盖默认值,比如:

devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit :email, :password, :password_confirmation, :first_name, :last_name
end


但如果你真的需要,你可以编辑Gemfile并替换这行

gem 'devise', '3.0.3'

这个:

gem 'devise', github: 'plataformatec/devise', branch: 'master'

然后你可以很容易地添加你的自定义字段,比如:

# Single field
devise_parameter_sanitizer.for(:account_update) << :first_name
# Multiple fields at a time
devise_parameter_sanitizer.for(:account_update) << [:first_name, :last_name]

但是请注意,目前这是一个候选版本3.1.0 RC1

相关内容

  • 没有找到相关文章

最新更新