2016-09-09 4 views
0

が存在するように/ else文は、それを処理する場合、私は、ユーザーがper_quizを完了していない場合per_quiz#newページにユーザーを指示するために、私のコントローラでは、次のif文を持っていますが、per_quiz#editページへ彼らは1をとっている:モデルは `Nil`あるが、それは

def new 
    @per_quiz = current_user.build_per_quiz 
    if current_user.per_quiz != nil 
    redirect_to edit_per_quiz_path(current_user.per_quiz) 
    end 
end 

私は私consoleによって言うことができるように、per_quizを取られていないユーザーとしてlocalhostの午前:

[2] pry(main)> User.first.per_quiz 
    User Load (0.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
    PerQuiz Load (0.2ms) SELECT "per_quizzes".* FROM "per_quizzes" WHERE "per_quizzes"."user_id" = ? LIMIT 1 [["user_id", 1]] 
=> nil 
No route matches {:action=>"edit", :controller=>"per_quizzes", :id=>nil} missing required keys: [:id] 

これはのredirect_to行に呼び出された:私は、私は(私が思う)というエラーが出るのページにアクセスしようとしたとき、私はif文の間違ったフォークに向けられてるようしかし、見えますコントローラ。

誰でもここで起こっていることを見て、それがグリッチになっているのを見ることはできますか?

+0

試してみてくださいcurrent_user.per_quiz.nil? –

+0

@GokulM、いいえ、それは私に同じエラーを与えます。私はさまざまなフレーズを試しました... – Liz

+0

'puts current_user.per_quiz'が何を表示するか試してみてください。 –

答えて

0

私は権力を相談し、これにそれを変更するためになってしまった:ifの文がnil-しかし、同時に-ない-nilのにクイズを急落される前に

def new 
if current_user.per_quiz 
    redirect_to edit_per_quiz_path(current_user.per_quiz) 
    flash[:notice] = 'You already took this quiz' 
else 
    @per_quiz = current_user.build_per_quiz 
end 
end 

はどうやらビルドを持ちます、シュレーディンガーの猫のタイプの状況。

関連する問題