2016-04-26 23 views
1

Ich versuche, ein Quiz-Modul, in dem die Antwort auf jede Multiple-Choice-Frage aufgezeichnet und auf den entsprechenden Benutzer zurückverfolgt wird. Da die Bearbeitung und die neuen Ansichten beide dasselbe Formular verwenden, verwende ich eine partielle.Argument Fehler (erstes Argument in Formular kann nicht enthalten nil oder leer sein) für Form_for

Wenn ich versuche, die neue Ansicht zu sehen Fehler ich bin immer ein Argument zu sagen „Erstes Argument in Form nicht gleich Null enthalten oder leer sein“

Der Controller ist:

class QuizBsController < ApplicationController 
    before_action :require_sign_in 

    def show 
    @quiz_bs = QuizBs.find(params[:id]) 
    end 

    def new 
    @quiz_bs = QuizBs.new 
    end 

    def create 
    @quiz_bs = QuizBs.new 

    @quiz_bs.bs01 = params[:quiz_bs][:bs01] 
    @quiz_bs.bs02 = params[:quiz_bs][:bs02] 
    @quiz_bs.bs03 = params[:quiz_bs][:bs03] 
    @quiz_bs.bs04 = params[:quiz_bs][:bs04] 
    @quiz_bs.bs05 = params[:quiz_bs][:bs05] 
    @quiz_bs.bs06 = params[:quiz_bs][:bs06] 

    @quiz_bs.user = current_user 

    if quiz_bs.save 
     flash[:notice] = "Quiz results saved successfully." 
     redirect_to user_path(current_user) 
    else 
     flash[:alert] = "Sorry, your quiz results failed to save." 
     redirect_to welcome_index_path 
    end 
    end 

    def update 
    @quiz_bs = QuizBs.find(params[:quiz_bs]) 

    @quiz_bs.assign_attributes(quiz_bs_params) 

    if @quiz_bs.save 
     flash[:notice] = "Post was updated successfully." 
     redirect_to user_path(current_user) 
    else 
     flash.now[:alert] = "There was an error saving the post. Please try again." 
     redirect_to welcome_index_path 
    end 
    end 

    private 
    def quiz_bs_params 
    params.require(:quiz_bs).permit(:bs01, :bs02, :bs03, :bs04, :bs05, :bs06) 
    end 

end 

Die neue Ansicht ist:

<div class="container"> 
    <div id="quiz_bs_new" class="text-center"> 
    <h1>Body Structure Quiz</h1> 
    </div> 

<%= render partial: "quiz", locals: { quiz: @quiz_bs } %> 

</div> 
<div class="buffer-50"></div> 

Und hier ist meine Form Teil:

<%= form_for @quiz do |f| %> 
    <div class="row"> 
     <div class="col-sm-12"> 

     <div class="form-group"> 
      <%= f.label "Question Text" %><br> 
      <div class="radio left-padding-30"> 
      <%= f.radio_button :bs01, '1'%><label>31 Seconds or More</label><br> 
      <%= f.radio_button :bs01, '2'%><label>26 - 30 Seconds</label><br> 
      <%= f.radio_button :bs01, '3'%><label>21 - 25 Seconds</label><br> 
      <%= f.radio_button :bs01, '4'%><label>16 - 20 Seconds</label><br> 
      <%= f.radio_button :bs01, '5'%><label>10 - 15 Seconds</label><br> 
      <%= f.radio_button :bs01, '6'%><label>6 - 9 Seconds</label><br> 
      <%= f.radio_button :bs01, '7'%><label>0 - 5 Seconds</label> 
      </div> 
     </div> 

    </div> <!-- column end --> 
    </div> <!-- row end --> 

    <div class="buffer-25"></div> 

    <div class="row"> 
    <div class="col-xs-12 center-block"> 
     <div class="center-block"><%= f.submit %></div> 
     </div> <!-- column end --> 
    </div> <!-- row end --> 

<% end %> 
+0

ist 'update' oder' new'? posten Sie auch Ihre 'Rake-Routen', das ist ez fix. – 7urkm3n

Antwort

1

Variablen zu partials als lokale Variablen übergeben bekommen. Verwenden Sie quiz anstelle von @quiz in Ihrem Formular teilweise sollte das Problem beheben.

EDIT

auch die URL in Ihrem form_for setzten die Form Routen auf der rechten Seite Controller-Aktion, um sicherzustellen:

form_for quiz, url: quiz_bs_path, method: :post

und ersetzen quiz_bs_path mit dem, was Routenkarten zu QuizBsController # erstellen

+0

Das hat zumindest den Fehler geändert. Jetzt bekomme ich eine keine Methode Fehler sagen "undefined Methode' quiz_bs_index_path '"... – Liz

+0

Welche Zeile gibt Ihnen diesen Fehler? –

+0

Selbe: '<% = form_for quiz do | f | %> ' – Liz