未允许的参数向rails中的Devise添加新字段

时间:2016-07-27 03:37:07

标签: ruby-on-rails model-view-controller devise

当用户进行注册并按下注册时出现此错误

undefined method `for' for #<Devise::ParameterSanitizer:0x007fe4c2821988> Did you mean? fork

  }
elsif params[:action] == 'create'
  devise_parameter_sanitizer.for(:sign_up) { 
    |u| u.permit(registration_params) 
  }
end

这是我的应用程序控制器

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_devise_permitted_parameters, if: :devise_controller?

  protected
  def configure_devise_permitted_parameters
    registration_params = [
       :first_name, :last_name, :address, :gender, :DOB, 
       :email, :password, :password_confirmation, 
       :image, :thumb, :medium
    ]

    if params[:action] == 'update'
      devise_parameter_sanitizer.for(:account_update) { 
        |u| u.permit(registration_params << :current_password)
      }
    elsif params[:action] == 'create'
      devise_parameter_sanitizer.for(:sign_up) { 
        |u| u.permit(registration_params) 
      }
    end
  end
end

我可以知道问题是什么以及如何解决它

4 个答案:

答案 0 :(得分:1)

要解决此问题,请在代码中将for替换为permit

<强>解释

Devise :: ParamsSanitizer上的方法#for已在设计4.2中删除,并替换为两个新方法#sanitize#permit

#permit接受一个块参数,所以它可能就是你想在这里使用的。

见:
https://github.com/plataformatec/devise/blob/v4.2.0/CHANGELOG.md#420---2016-07-01
https://github.com/plataformatec/devise/blob/v4.2.0/lib/devise/parameter_sanitizer.rb#L108

答案 1 :(得分:0)

您可以使用此代码进行参考,并更改您想要的用户表中列名的params。我正在使用usernameapplication_controller.rb

中添加此内容
  before_filter :configure_permitted_parameters, if: :devise_controller?

###### PROTECTED METHODS #######################
  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) << :username
    devise_parameter_sanitizer.for(:sign_up) << :username
  end

希望这会有所帮助:)

答案 2 :(得分:0)

您在注册时间方面遇到问题,因此允许这种方式使用params。还要检查设备gem上的强参数。

before_filter :update_sanitized_params, only: [:create], if: :devise_controller?

    protected
        def update_sanitized_params
          devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:first_name, :last_name, :address, :gender, :DOB,:email, :password, :password_confirmation,:image, :thumb, :medium)}
        end

答案 3 :(得分:0)

好吧,实际上我修好了但事情就是当我去控制台做User.last并且我得到了nill

class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configure_devise_permitted_parameters, if: :devise_controller?

protected
def configure_devise_permitted_parameters
registration_params = [
   :first_name, :last_name, :address, :gender, :DOB, 
   :email, :password, :password_confirmation, 
   :image, :thumb, :medium
]

if params[:action] == 'update'
  devise_parameter_sanitizer.for(:account_update) { 
    |u| u.permit(registration_params << :current_password)
  }
elsif params[:action] == 'create'
  def configure_devise_permitted_parameters
  devise_parameter_sanitizer.fot(:sign_up).push(registration_params)
end
end
end

enter image description here