Ruby on Rails - 如果语句使用params - 返回错误的结果

时间:2015-11-20 11:50:33

标签: ruby-on-rails ruby

我很难找到一些非常简单易用的东西。

我有一个在线测验,其中包含多项选择题和通过/失败标记。我已经把一切都正常工作了,最后是该死的电子邮件功能。无论pass是设置为true还是false,它总是发送传递的电子邮件。我是否在这段代码中做了一些有点愚蠢的事情,我看不到,或者我将不得不用细齿梳回去做所有事情?

   def finalize
     quiztype = params[:quiztype]
     slug = params[:slug]
     @qd = Quizdata.where(quiztype: quiztype, usertoken: slug).take
     if @qd
       @qd.completed = true
       quizdata = JSON.parse(@qd.quizdata)
       quizdata["completed"] = true
       @qd.quizdata = quizdata.to_json
       @qd.passed = params[:passed]
       if @qd.save
         if params[:passed]
           QuizMailer.results_email_user(quizdata, @qd).deliver
         else
           QuizMailer.results_email_user_failed(quizdata, @qd).deliver
         end
         QuizMailer.results_email_client(quizdata, @qd).deliver
         render json: { errors: [] }
       else
         render :json => { :errors => @qd.errors.full_messages }, :status => 422 #Unprocessable entity
       end
     else
       render :json => { :errors => [ "Record not found" ] }, :status => 404
     end
   end

2 个答案:

答案 0 :(得分:1)

你走了:

替换

if params[:passed]

if ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.include?(params[:passed])

它失败了,因为你得到的结果是String格式(不是nil,这使得它总是返回true)而不是Boolean。

希望它有所帮助!

答案 1 :(得分:0)

参数作为字符串传递。

应该是:

if params[:passed] == "true"
  QuizMailer.results_email_user(quizdata, @qd).deliver
else
  QuizMailer.results_email_user_failed(quizdata, @qd).deliver
end