2013-05-04 12 views
53

Używam gałęzi gałęzi rails 4.0 wraz z ruby ​​2.0.0p0 i Rails 4.0.0.beta1.Mocne parametry z Railsami i Devise

Jest to rodzaj pytania, w którym sprawdzam, czy robię to we właściwy sposób, lub czy są inne rzeczy, które powinienem robić. Jestem pewien, że wiele osób przechodzących na Rails 4.0 boryka się z tymi samymi problemami (po przeszukaniu podobnych rzeczy).

Czytałem poniższe linki:

Teraz używając opracować stworzyłem model użytkownika, stworzyłem następujące kontroler Stosując powyższe GIST (i upewnij się, że jest to uwzględnione w pliku moich tras). Moje dodatkowe parametry to first_name i 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 

Czy jest coś jeszcze, co powinienem robić? Jest to najlepszy sposób robienia rzeczy od teraz (od kiedy upuszczasz attr_accessor). Moje formularze działają poprawnie (zarówno nowe, jak i uaktualnione). Mówi się, że używają "resource_params", ale zawsze podawałem błąd "Nieprawidłowe parametry" w moim dzienniku serwera.

Odpowiedz

67

Dzięki za najnowsze aktualizacje na temat gałęzi Devise Rails4, tak naprawdę nie trzeba wstawiać "resource_params".

Stworzyłem zupełnie nową aplikację Rails4 i wykonałem podstawowe kroki instalacji Devise, a moja aplikacja działa poprawnie, więc myślę, że spisałeś się dobrze.

Ale jest zmodyfikowana istota, która daje jakieś dodatkowe szczegóły w kategoriach dozwolonych parametrów, jeśli potrzebujesz:

Źródło: 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

Dzięki wielkie! Uratował mnie. – b0xxed1n

+1

Dzięki, pomógł mi też. To powinna być zaakceptowana odpowiedź. –

7

Działa bardzo miłe z dodanie modułu w config/initializers z wszystko parameters jak ten

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

Próbowałem tej metody, ale to nie działa dla mnie. Czy jest coś, co należy zrobić po stronie sterownika, aby uwzględnić moduł lub czy będzie on automatyczny? – Batman

+0

Wow Twój jest bardziej elegancki :) Piękny. –

25

Dla Szyny 5, Opracować 4 Użyj tego:

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

To było dokładnie to, czego potrzebowałem. Doceniam to. – DNorthrup

Powiązane problemy