我使用的是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