2013-05-04 12 views
53

私は、ruby 2.0.0p0とRails 4.0.0.beta1とともにdeviseの4.0ブランチを使用しています。RailsとDeviseで強力なパラメータ

これは正しい方法で行っているかどうかを確認したり、他にやるべきことがあるかどうかを確認する質問の一種です。私は、Rails 4.0に移行している多くの人が同じ問題に直面していることを確信しています(同様のものを検索した後)。

私は、以下のリンク読んだ:

今、私はUserモデルを作成した工夫使用して、私は上記の要旨を使用して、次のコントローラを作成しました(そして私のルートファイルにそれを必ず含めてください)。私の余分なパラメータはfirst_nameとlast_nameです。

class Users::RegistrationsController < Devise::RegistrationsController 
    def sign_up_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) 
    end 
    def account_update_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password) 
    end 
    private :sign_up_params 
    private :account_update_params 
end 

私は何かすべきことはありますか?これは今から(attr_accessorを落としてからの)最良のやり方ですか?私のフォームはうまく機能しているようです(新規と更新の両方)。要点は "resource_params"を使用すると言いましたが、それは私のサーバーログに "Unpermitted parameters"エラーを与えました。

答えて

67

DevisesのRails4ブランチに関する最新のアップデートをお寄せいただきありがとうございます。実際には、 'resource_params'を挿入する必要はありません。

新しいRails4アプリを作成し、基本的なDeviseインストール手順に従いました。私のアプリは正しく動作するので、うまくいきました。

しかし、あなたが必要な場合は、許可パラメータに関してあなたにいくつかの余分な詳細を与える変更要旨があります:

出典:それはとconfig/initializersにモジュールを追加することで非常に素晴らしい作品https://gist.github.com/bluemont/e304e65e7e15d77d3cb9

# controllers/users/registrations_controller.rb 
class Users::RegistrationsController < Devise::RegistrationsController 

    before_filter :configure_permitted_parameters 

    protected 

    # my custom fields are :name, :heard_how 
    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) do |u| 
     u.permit(:name, :heard_how, 
     :email, :password, :password_confirmation) 
    end 
    devise_parameter_sanitizer.for(:account_update) do |u| 
     u.permit(:name, 
     :email, :password, :password_confirmation, :current_password) 
    end 
    end 
end 
+3

をどうもありがとう!助かりました。 – b0xxed1n

+1

ありがとう、助けてもらった。これは受け入れられた答えでなければなりません。 –

7

この

module DevisePermittedParameters 
    extend ActiveSupport::Concern 

    included do 
    before_filter :configure_permitted_parameters 
    end 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) } 
    end 

end 

DeviseController.send :include, DevisePermittedParameters 
+1

私はこの方法を試みましたが、それは私のためには機能しませんでした。モジュールを含めるためにコントローラー側で行う必要があるものはありますか、それとも自動ですか? – Batman

+0

あなたはもっとエレガントです:)美しいです。 –

25

の場合のように、すべてのparameters 4使用この考案、5レール:

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

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation]) 
    end 
end 

Reference

+0

これはまさに私が必要としていたものでした。感謝します。 – DNorthrup

関連する問題