6

我正在使用 Rails 4.0.0 和 Devise 3.0.2 并尝试按照设计自述文件中的此说明配置具有强参数的设计。

我在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

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

4

3 回答 3

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

于 2013-08-17T15:19:10.483 回答
4

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

于 2013-08-17T10:23:07.410 回答
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

于 2013-09-02T10:57:24.677 回答