我很难找到一些非常简单易用的东西。
我有一个在线测验,其中包含多项选择题和通过/失败标记。我已经把一切都正常工作了,最后是该死的电子邮件功能。无论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
答案 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