2013-08-17 11 views
6

Używam Rails 4.0.0 i Devise 3.0.2 i próbuję skonfigurować Devise z silnymi parametrami po this instruction w Devise README.Dostosowywanie tworzenia z silnymi parametrami

pisałem kod jak to w 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 

Potem odwiedził http://localhost:3000/users/sign_up. Mam NoMethodError in Devise::RegistrationsController#new, który mówi:

metoda niezdefiniowany <<' for {}:ActionController::Parameters

i wskazuje dokładnej linii, gdzie pisałem devise_parameter_sanitizer.for(:sign_up) << :nick

Czy coś zrobiłem źle? Dzięki za pomoc.

+0

próbowałem dokładnie ten sam kod i uzyskać ten sam błąd. 'devise_parameter_sanitizer.for (: sign_up)' zwraca pusty skrót, więc nie można wywołać metody '<< '. Przesłałem [problem] [1], możesz to zrobić. [1]: https://github.com/plataformatec/devise/issues/2574 –

+0

@ RafałCieślak Dziękuję za potwierdzenie, postąpię zgodnie z instrukcją. –

Odpowiedz

4

Jako Jose Valim said, jest to funkcja Devise 3.1.0.rc, dlatego nie działa. Musisz użyć innych składni, które są w README.

5

Spróbuj:

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 

To działa na mnie! : D

+0

Czy to działa w modelu? –

+0

Wstawiam ApplicationController: before_filter: configure_permitted_parameters, jeśli:: devise_controller? –

4

Problem dokładnie odpowiada Twojemu problemowi: #2574 : devise_parameter_sanitizer.for(:sign_up) << :something raises an error.

W rzeczywistości metoda dodawania pól niestandardowych do silnych parametrów, takich jak ta, jest nową funkcją dostarczaną wraz z programem Devise 3.1.

Ponieważ obecna wersja w Rubygems.org to 3.0.3, nie można obecnie korzystać z tej metody w projekcie szyn. Będziesz musiał zastąpić domyślne tak:

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


Ale jeśli naprawdę trzeba, można edytować Gemfile i zastąpić tę linię

gem 'devise', '3.0.3' 

z tym jeden:

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

Następnie c łatwo dodawać pól niestandardowych tak:

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

Ale ostrzegamy, to obecnie jest kandydatem Release: 3.1.0 RC1

+0

to zawsze małe szczegóły ... byłoby miło, gdyby wspomnieli o tym w readme dla biednych github noobów takich jak ja ... FWIW TYLKO, co działało (wypróbowałem kilka różnych przykładów w Internecie) umieszcza moje attrs w u.permit grupa jak Carlos wspomina powyżej. – Danny