2017-03-03 26 views
1

私はdeviseの登録メソッドをカスタマイズしてより多くのパラメータを登録し、さらに多くの情報を更新しようとしていましたが、いつもUnpermitted parameters:というエラーが発生します。私はこのAdding extra registration fields with Devisehttps://github.com/plataformatec/devise#strong-parametersを使ってみましたが、それを乗り越えることはできません。登録のためのカスタムパラメータの追加 - 許可されていないパラメータ

私はまた、外部キーをユーザーIDとして保持し、そこにuser_id, display_name, profile_pictureのような新しいテーブルを作成することを考えましたが、同じページからすべてを送信しようとすると同じ問題が発生しますコントローラを作成する)。

私はこれをどのように解決できるかについてご意見はありますか?他に何を投稿しなければなりませんか?あなただけのパラメータが許可されるべき工夫伝える必要がありますように

routes.rbを

devise_for :users, controllers: { registrations: 'users/registrations' } 

ユーザー/ REGCは

def create 
    build_resource(registration_params) 

    if resource.save 
     if resource.active_for_authentication? 
     set_flash_message :notice, :signed_up if is_navigational_format? 
     sign_up(resource_name, resource) 
     respond_with resource, :location => after_sign_up_path_for(resource) 
     else 
     set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format? 
     respond_with resource, :location => after_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords 
     respond_with resource 
    end 
    end 

private 
    def registration_paramss 
    params.require(:user).permit(:email, :display_name, :terms_of_services, :profile, :password, :password_confirmation) 
    end 
+0

を追加しました以下は工夫の設定を投稿してください。 – 31piy

+0

@ 31piy更新しました –

+0

あなたはどのdeviseのバージョンを使用していますか?オーバーライドされたコントローラ(ユーザー/登録)を表示できますか?作成アクションとサインアップパラメータをカスタマイズする部分。 – gkats

答えて

6

見えます。デフォルトでは、deviseは電子メール(または設定に応じてユーザ名)、パスワード、およびパスワード確認パラメータを許可します。もっと追加するだけです。

devise documentationはこれを設定する「怠惰な方法」を示しています。

class ApplicationController < ActionController::Base 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:display_name]) 
    end 
end 

ドキュメントは、

If you have nested attributes (say you're using accepts_nested_attributes_for), then you will need to tell devise about those nestings and types. 

あなたはregistrations#createアクションを上書きする必要がある場合にのみ、あなたが工夫のためのカスタムルートを提供すべきであると述べています。その場合は、sign_up_paramsメソッドもオーバーライドしてください。

class Users::RegistrationsController < Devise::RegistrationsController 
    def create 
    # Your custom code here. Make sure you copy devise's functionality 
    end 

    private 

    # Notice the name of the method 
    def sign_up_params 
    params.require(:user).permit(:display_name, :email, :password, :password_confirmation) 
    end 
end 

本質的に、あなたはあなたのサインアップフォームがコントローラで、強力なパラメータを設定する方法を見つけ出すためのパラメータを掲示する方法を検討する必要があるだろう。 strong parametersの構文も必ずお読みください。

希望すると助かります!

+0

私はあなたが提案したとおりに正確に行いました。同じエラー。 –

+0

実際問題はSessionsController内にあります。ユーザーを作成しようとすると、ユーザーをログインさせようとしますが、セッションコントローラーは引き続き許可されていないパラメーターを表示します。セッションコントローラも変更する必要がありますか?どちらの解決策もその問題に終わる。 –

+0

':sign_in'のパラメータを指定することでそれを試すことができます。しかし、リダイレクトしないとわかっている限り、それはユーザーにサインアップするだけなので変だと思う。このエラーは、エラーまたは警告ですか?登録がうまくいってモデルが保存されていれば、許可されていないパラメータの警告に気を付けるべきではありません。 – gkats

2

Devise 4.2.0では、これらの値をキーに追加することで、ユーザーテーブルの追加パラメータをホワイトリストに追加できます。デフォルトでは、あなたは今から離れてコメントすることができます。私は:avatar

# If you have extra params to permit, append them to the sanitizer. 
    def configure_sign_up_params 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :avatar]) 
    end 
関連する問題