2016-04-26 17 views
1

それぞれの選択肢質問に対する回答が記録され、適切なユーザーにトレースされるクイズモジュールを作成しようとしています。編集と新しいビューはどちらも同じフォームを使用するので、私は部分的なものを使用しています。Form_forの引数エラー(フォームの最初の引数にはnilを含めることも空でもない)

私は「フォームの最初の引数がnil含まれているか、空にすることはできません」と言って引数のエラーを取得しています新しいビューを表示しよう

コントローラは次のとおりです。

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 

新しいビューは次のとおりです。

<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> 

そして、ここでは私のフォームは部分的だ:

<%= 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'または' new'ですか?あなたの 'rake routes'も投稿してください。 – 7urkm3n

答えて

1

変数はローカル変数としてパーシャルに渡されます。フォームの部分に@quizの代わりにquizを使用すると問題が解決するはずです。

EDITまた、フォームの右コントローラのアクションへの経路を確認するためにあなたのform_forにURLを設定し

:QuizBsController#にルートマップを作成するものは何でもして

form_for quiz, url: quiz_bs_path, method: :post

と置き換えるquiz_bs_path

+0

少なくともエラーを変更しました。今私は方法のエラーが "定義されていないメソッド' quiz_bs_index_path '"と言っています... – Liz

+0

どの行があなたにエラーを与えていますか? –

+0

同じもの: '<%= form_for quiz do | f | %> ' – Liz

関連する問題