2016-02-27 11 views
6

ja nie nie dlaczego, ale następujący kod po prostu przestał działać (ja nawet nie zauważyłem, jak to się stało)Devise: Parametry niedozwolonej

routes.rb

devise_for :users, components: {registrations: 'registrations', sessions: 'sessions'} 

registations_controller .rb

class RegistrationsController < Devise::RegistrationsController 
    before_filter :configure_permitted_parameters 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up).push(:name, :surname, :username, :email, :avatar) 
    devise_parameter_sanitizer.for(:account_update).push(:name, :surname, :email, :avatar) 
    end 

end 

Jak powiedziałem, everyting działało w porządku, ale teraz jestem coraz:

Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"lvuPOmTRqv6XUQ/O1g4Q9VNvzD7DgGCHocY/OlAvKHEIvWAHvlS982hxSZZzzAESCpmL5QTUcTLw/c9ME/sUFQ==", "user"=>{"name"=>"John", "surname"=>"Doe", "username"=>"foobar", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Register"} 
Unpermitted parameters: name, surname, email 

Cofiguration:

  • Rails 4.2.5
  • Devise 3.5.6

PS: Teraz finnaly zrozumieć dlaczego mam pokryć mój kod z jednostek badań i użyj Travis CI

Odpowiedz

6

Myślę, że powinieneś spróbować "configure_ allowed_parameters "w kontrolerze aplikacji zamiast kontrolera rejestracji.

class ApplicationController < ActionController::Base 

before_action :configure_permitted_parameters, if: :devise_controller? 

protected 

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up).push(:name, :surname,:username, :email, :avatar) 
    devise_parameter_sanitizer.for(:account_update).push(:name, :surname, :email, :avatar) 
end 
end 
+0

Pomogłem. Ale dlaczego? Co się stało z poprzednim kodem? – Viktor

+0

https://github.com/plataformatec/devise proszę przejrzeć. to może ci pomóc. –

+0

Metoda 'for' jest przestarzała od wersji 4.1. Użyj tego zamiast: – dexter

5

Metoda for jest przestarzała od wersji 4.1. Użyj tego:

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

    protected 

    def configure_permitted_parameters 
    attributes = [:name, :surname,:username, :email, :avatar] 
    devise_parameter_sanitizer.permit(:sign_up, keys: attributes) 
    devise_parameter_sanitizer.permit(:account_update, keys: attributes) 
    end 
end 
+0

to nie działa dla mnie.ma alternatywa? –