6

私は Rails 4.0.0 と Devise 3.0.2 を使用しており、Devise README 内のこの指示に従って、強力なパラメーターで Devise を構成しようとしています。

私はこのようなコードを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) << :何かがエラーを発生させます

実際、このような強力なパラメータにカスタム フィールドを追加する方法は、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 に答える