2016-07-27 35 views
0

ユーザーがサインアップし、プレスが許可されていないパラメータが

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 

私が知ることができる私は、これは自分のアプリケーションのコントローラである

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 

このエラーを取得するサインアップ作る時にレールに工夫するものを問題とその解決方法

+0

あなたが達成したい何? – uzaif

答えて

0

参照のためにこのコードを使用し、希望するユーザーテーブルの列名のparamsを変更することができます。を使用しています0 は、あなたがサインアップ時に問題があるこのことができます:)

0

をごapplication_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 

希望でこれを追加ので、この方法のparams許可します。デバイスのgemのStrong Parametersもチェックしてください。

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 
0

はよく、実際に私はそれを固定ではなく、私はUser.lastを行うコンソールにアクセスし、私は

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

+0

@Chaudhary Prakashはこれを確認できます –

1

にnill取得するときのものですこの問題を解決するには、forpermitに置き換えてください。

説明:

方法考案に#for :: ParamsSanitizerは工夫4.2で除去し、そして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

関連する問題