2016-05-12 12 views
0

Ich versuche, Wicked Juwel mit Devise zu implementieren, wie ich Benutzer durch verschiedene Schritte gehen, um ihre Profile zu vervollständigen. Ich bin ein kompletter Neuling, also würde ich mich freuen, wenn Sie mir einen Vorschlag geben könnten, was das Problem sein könnte.undefined Methode `Attribute 'für Nil: NilClass - Wicked/Devise Gems

Der Fehler, den ich bekomme, ist dieser und es zeigt, wenn ich versuche, von "Personal" zu "Style" Schritt fortzufahren. Ich denke, es ist ein Problem mit den Daten zu speichern:

NoMethodError in OnboardingController#update 

undefined method `attributes' for nil:NilClass 
**@user.attributes(user_params)** 

Das ist meine Anmeldung und Onboarding-Controller:

class RegistrationsController < Devise::RegistrationsController 


    protected 

    def after_sign_up_path_for(resource) 
    '/onboarding/personal' 
    end 

    def after_update_path_for(resource) 

    registration_steps_path 

    end 

    def new 

    super 

    end 



    def create 

    super 

    end 



    def update 

    super 

    end 



    def update_resource(resource, params) 
    if resource.encrypted_password.blank? # || params[:password].blank? 
     resource.email = params[:email] if params[:email] 
     if !params[:password].blank? && params[:password] == params[:password_confirmation] 
     logger.info "Updating password" 
     resource.password = params[:password] 
     resource.save 
     end 
     if resource.valid? 
     resource.update_without_password(params) 
     end 
    else 
     resource.update_with_password(params) 
    end 
    end 
end 

und

class OnboardingController < ApplicationController 
    include Wicked::Wizard 
    steps :personal, :stylefirst 


    def show 
     @user = current_user 
    render_wizard 

    end 

    def update 

    @user = current_user 

    @user.attributes(user_params) 

    render_wizard @user 

    end 


end 
+0

Der Fehler besagt, dass current_user in der Update-Aktion für den Onboarding-Controller nicht vorhanden ist. –

+0

Hm, aber es existiert, wie Sie sehen können ... –

+1

Nein, wir können nicht sehen. Es könnte sein, dass der Benutzer einfach nicht eingeloggt ist. – Leito

Antwort

1

Mit Devise, current_user ist nil, wenn kein Benutzer ist eingeloggt. Ihr Problem besteht also darin, dass Sie @user = current_user Ihrer Aktion update zuweisen, ohne zu überprüfen, ob ein Benutzer angemeldet ist.

Wenn Sie die update Aktion sicherstellen wollen, ist nur in Benutzern unterzeichnet verfügbar dann die authenticate_user! Helfer Aktion verwenden, indem Devise bereitgestellt:

class OnboardingController < ApplicationController 
    before_filter :authenticate_user!, only: [:edit, :update] 

    # ... 
end 

Die authenticate_user! Hilfsmethode wird der Benutzer auf der Anmeldeseite umleiten, wenn Sie sind nicht angemeldet. Wenn sich der Benutzer erfolgreich anmeldet, wird current_user festgelegt und sie werden zurück auf die Seite umgeleitet, auf die ursprünglich zugegriffen werden sollte.

+0

Es war wegen der Authentifizierung danke! Aber jetzt bekomme ich einen neuen Fehler in der gleichen Zeile: ActiveModel :: ForbiddenAttributesError –

+0

Sie müssen die Params, die Sie aus Ihrem Formular mit starken Params übergeben, auf die weiße Liste setzen: http://edgeguides.rubyonrails.org/action_controller_overview.html # starke Parameter. –

+0

vielen Dank Anthony! es funktioniert! :) –

Verwandte Themen