2013-04-30 67 views
1

我有轨测验的应用程序,NoMethodError,对于无未定义的方法:NilClass

当用户得到一个测验,然后检查quizuser,如果它仍然是空的,如果空然后创建quizuser,如果不为空将继续。

型号

class Quizuser < ActiveRecord::Base 
belongs_to :user 
belongs_to :quiz 
end 

class Quiz < ActiveRecord::Base 
has_many :quizusers, :dependent => :destroy 
end 

class User < ActiveRecord::Base 
has_many :quizusers, :dependent => :destroy 
end 

这里的错误信息

NoMethodError in QuizzesController#start 

undefined method `timer' for nil:NilClass 

app/controllers/quizzes_controller.rb:29:in `start' 

你可以看起来像控制器

线29读取检查quizuser后,如果 quizuser.create

为什么timer@check之前执行?

如果@ a.first.timer < DateTime.now

@mu = Mu.find(params[:id]) 
    @now = DateTime.now 
    @end = @now + @mu.quiz.time.minutes 
    @check = Quizuser.where(:quiz_id => @mu.quiz.id, :user_id => current_user.id) 
    if @check == nil 
     @a = Quizuser.create(:quiz_id => @mu.quiz.id, :user_id => current_user.id, :start => @now, :timer => @end) 
     @havequiz = Havequiz.new 
     @havequiz.answerusers.build 
    else 
    @a = Quizuser.where(:quiz_id => @mu.quiz.id, :user_id => current_user.id) 
    if @a.first.timer < DateTime.now 
     @a.update_column(:grade, 0) 
     redirect_to home_subdomain_path, :notice => 'Sorry your quiz time is over.' 
    else 
     @havequiz = Havequiz.new 
     @havequiz.answerusers.build 
    end 
    end 


<div class="countdown"></div> 

<script type="text/javascript">$(document).ready(function() { 
    var date = new Date('<%= @a.first.timer %>'); 
    $('.countdown').countdown({ 
     until: date, 
     format: 'dHMS' 
    }); 
});</script> 
+0

哪条线是29nth更换

if @check == nil 

? – 2013-04-30 10:41:31

+0

这里是第29行if'a.first.timer GeekToL 2013-04-30 10:43:25

+0

yes如果找不到,quizuser create请参阅if ifcheck == nil – GeekToL 2013-04-30 10:48:16

回答

3

的问题是,你不应该检查查询结果为空。

尝试

if @check.empty? 
+0

很棒..谢谢,那是工作, – GeekToL 2013-04-30 10:50:40

相关问题