我正在使用Rails 4.0.0和Devise 3.0.2并尝试在Devise自述文件中this instruction之后配置具有强参数的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
我做错了什么吗?谢谢你的帮助。
答案 0 :(得分:5)
尝试:
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
答案 1 :(得分:4)
作为Jose Valim said,它是Devise 3.1.0.rc功能,这就是它不起作用的原因。您必须使用README中的其他语法。
答案 2 :(得分:4)
问题完全符合您的问题:#2574 : devise_parameter_sanitizer.for(:sign_up) << :something raises an error。
事实上,将自定义字段添加到强参数中的方法就是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