-1

Ich habe eine 'landing.html.erb' unter einem Ordner 'Willkommen' in meinen Ansichten. Im WelcomeController habe ich folgendes:Objekt ist alles Nils in Rails 4+?

def landing 
@quiz = Quiz.new 
end 

, um ein neues Quiz zu erstellen. Wenn der Benutzer auf die Schaltfläche zum Erstellen klickt, ist der Code, den ich für den QuizzesController habe,

def create 
@quiz = current_user.quiz.build(quiz_params) 
if @quiz.save 
    flash[:success] = "Updated" 
    redirect_to @quiz 
else 
    render 'new' 
end 
end 

def quiz_params 
params.require(:quiz).permit(:q1) 
end 

. Allerdings gibt dieser den Fehler:

undefined method `build' for nil:NilClass 

speziell auf der Linie

@quiz = current_user.quiz.build(quiz_params) 

ich die Schienen Konsole lief und tippte Quiz.new und es jedes Feld als ‚Null‘ angezeigt, und ich bin nicht ganz sicher, was ich ändern muss und würde Beratung schätzen.

Das Quiz-Modell gehört zu Benutzer. Der Benutzer hat ein Quiz.

Vielen Dank.

+2

müssen Sie current_user.build_quiz (quiz_params) verwenden, wenn has_one eine Verknüpfung hat. – power

+0

Wenn es Ihnen nichts ausmacht, werde ich die detaillierte Antwort geben. – power

+0

@power Kein Problem! – helpisgood

Antwort

3

Hier nehme ich an, Sie haben has_one eine Verbindung zwischen Benutzer und Quiz. Zum Erstellen des zugehörigen Objekts müssen Sie den folgenden Code verwenden.

current_user.build_quiz(quiz_params) 

Dies wird das Quiz-Objekt mit dem User_id Feld enthält die ID des aktuellen Benutzers und in anderen Bereichen nach quiz_params bauen.