2013-08-17 5 views
6

Ich verwende Rails 4.0.0 und Devise 3.0.2 und versuche, Devise mit starken Parametern nach this instruction in der Devise README zu konfigurieren.Anpassen von Devise mit starken Parametern

schrieb ich Code wie dies in der 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 

Dann besuchte ich http://localhost:3000/users/sign_up. Ich habe eine NoMethodError in Devise::RegistrationsController#new, die sagt:

nicht definierte Methode <<' for {}:ActionController::Parameters

und verweist auf die genaue Zeile, wo ich devise_parameter_sanitizer.for(:sign_up) << :nick

schrieb Gibt es etwas, was ich falsch gemacht habe? Danke für Ihre Hilfe.

+0

Ich habe versucht, genau den gleichen Code und die gleichen Fehler. 'devise_parameter_sanitizer.for (: sign_up)' gibt einen leeren Hashwert zurück, so dass es nicht möglich ist, '' '' 'Methode dafür aufzurufen. Ich habe [eine Ausgabe] [1] eingereicht, Sie können das verfolgen. [1]: https://github.com/plataformatec/devise/issues/2574 –

+0

@ RafałCieślak Vielen Dank für Ihre Bestätigung, ich werde das Problem verfolgen. –

Antwort

4

Als Jose Valim said ist es Devise 3.1.0.rc-Funktion, deshalb funktioniert es nicht. Sie müssen andere Syntaxen verwenden, die sich in README befinden.

5

Versuchen:

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 

Es funktioniert für mich! : D

+0

Geht das in das Modell? –

+0

Ich habe ApplicationController: before_filter: configure_permitted_parameters, wenn:: devise_controller? –

4

Ein Problem entspricht genau Ihrem Problem: #2574 : devise_parameter_sanitizer.for(:sign_up) << :something raises an error.

In der Tat ist die Methode zum Hinzufügen von benutzerdefinierten Feldern zu starken Parametern wie dieser eine neue Funktion, die mit Devise 3.1 kommt.

Da die aktuelle Version in Rubygems.org 3.0.3 ist, können Sie diese Methode im Moment nicht in Ihrem Rails-Projekt verwenden. Hier finden Sie die Standardwerte wie das außer Kraft setzen müssen:

devise_parameter_sanitizer.for(:sign_up) do |u| 
    u.permit :email, :password, :password_confirmation, :first_name, :last_name 
end 


Aber wenn Sie wirklich brauchen, können Sie Ihre Gemfile und ersetzen Sie diese Zeile

gem 'devise', '3.0.3' 

mit diesem bearbeiten eins:

gem 'devise', github: 'plataformatec/devise', branch: 'master' 

Dann c ein leicht Ihre benutzerdefinierten Felder wie das hinzufügen:

# 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] 

Aber gewarnt werden, derzeit ist dies ein Release Candidate: 3.1.0 RC1

+0

es sind immer die kleinen Details ... wäre nett, wenn sie dies in der Readme für arme Github noobs wie mich erwähnen ... FWIW das einzige was funktionierte (probierte ein paar verschiedene Beispiele im Internet) setzt meine Attras in die u.permit Gruppe wie Carlos erwähnt oben. – Danny