2015-12-29 9 views
11

Wygenerowano model użytkownika za pomocą narzędzia Devise gem.Nie można dodać niestandardowych pól do projektu Devise w Ruby on Rails. Błąd metody prywatnej

Próbujesz dodać atrybut "nazwa użytkownika".

Obserwowani oficjalna dokumentacja, teraz moja ApplicationController wygląda następująco:

class ApplicationController < ActionController::Base 

    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 
    before_action :authenticate_user! 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:account_update, keys: [:username]) 
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username]) 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    end 

end 

Kiedy staram się iść do odpowiedzialności stronę aktualizacji dostaję następujący błąd:

NoMethodError in Devise::RegistrationsController#edit 

private method `permit' called for #Devise::ParameterSanitizer:0x007f13396cf180> 

Co może być złego tutaj?

Odpowiedz

18

Według this answer, można również wykonaj następujące czynności:

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in)  << :username 
    devise_parameter_sanitizer.for(:sign_up)  << :username 
    devise_parameter_sanitizer.for(:account_update) << :username 
end 
+2

Dlaczego odpowiedź @Saiqul Haqa nie zadziałała, podczas gdy ta zrobiła. Jak widzę, oba mają ten sam logiczny wynik (przyjmując założenie tylko patrząc na kody – ImranNaqvi

18

Poniżej odpowiedź może być nieaktualne dla ciebie, więc proszę read the source code instead HERE


Pierwsza rzeczą, którą należy świadomy to Devise wersja więc sprawdzić zainstalowaną wersję na swoich szynach app przez nie polecenia:

cat Gemfile.lock | grep devise 

to pokazuje, które opracowują wersję aplikacji zainstalowanej na szynach, jak to jest:

devise (= 3.1.0) 

Jeśli wersja Twojego opracować wynosi> = 4.0.0.rc1

def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up) do |user_params| 
    user_params.permit({ roles: [] }, :email, :password, :password_confirmation) 
    end 
end 

wersji < 4.0.0.rc1

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in)  << :username 
    devise_parameter_sanitizer.for(:sign_up)  << :username 
    devise_parameter_sanitizer.for(:account_update) << :username 
end 
+0

Nie wiem, w jaki sposób '{role: []}' jest jakikolwiek użytek w tej odpowiedzi .... To był tylko przykład na GitHub wymyślić readme.md jeśli pola wyboru są używane, ponieważ nie są silne params ... – Mark