验证答案

时间:2015-09-20 03:19:27

标签: ruby-on-rails

我正在验证我正在构建的游戏应用的答案。我遇到了正确的数据库调用问题。

问题#validate_answer

def validate_answer
  @answer = Answer.where(correct: true)
  @correct_answer = @answer
  @selected_answer = params[:answer]

  #check if the submitted answer is the correct answer

  if @selected_answer == @correct_answer
    render :success
  else
    render :error
  end
end

Question.rb

class Question < ActiveRecord::Base
  belongs_to :category

  has_many :answers

  has_one :video_clue
  has_many :answers

  def correct_answer
    answers.find_by correct: true 
  end
end

Answer.haml

 %form#form{:action => results_path(@question), :method => "post"}

- @answers.each do |answer| 

.form-group
.radio

%input{:name => 'q_id', :type => 'hidden',:value =>'#{@question.id}'}

%input.btn.btn-default.btn-block{:name => 'answer', :style => 'vertical-align: middle; margin:0px;', :type => 'submit', :value => answer.text}

Seeds.rb

q = Question.create question: "In what year did MTV (Music Television) premiere and what was the first music video the channel aired?", category_id: 1
q.answers.create text: '1982 Michael Jackson Bille Jean'
q.answers.create text: '1984 Madonna Like a virgin' 
q.answers.create text: '1981 The Buggles Video Killed The Radio Star', correct: true

目标是将所选答案与正确答案相匹配。它不断渲染“失败”。页。

1 个答案:

答案 0 :(得分:0)

我相信你正在将一个字符串与ActiveRecord对象进行比较,当然这个对象会失败。

即。 '1982 Michael Jackson Bille Jean' != <Answer id:1 text:"1982 Michael Jackson Bille Jean">

您是否考虑过传递答案的ID而不是文字然后进行比较。这将允许您查询用户选择的答案。例如

问题#validate_answer

def validate_answer
  @answer = Answer.where(correct: true)
  @correct_answer = @answer
  @selected_answer = Answer.find(params[:answer_id])

#check if the submitted answer is the correct answer

  if @selected_answer == @correct_answer
    render :success
  else
    render :error
  end
end

或者您需要将params[:answer]与文字属性进行比较

问题#validate_answer

def validate_answer
  @answer = Answer.where(correct: true)
  @correct_answer = @answer.text
  @selected_answer = params[:answer]

#check if the submitted answer is the correct answer

  if @selected_answer == @correct_answer
    render :success
  else
    render :error
  end
end