2011-03-10 2 views
0

양식 레일 : 나는 양식 결과를 저장하면퀴즈 질문의 유효성을 검사하는 방법은 선택과 함께 퀴즈를 보여주는 아주 기본적인 형태가

<%= form_tag(quiz_attempts_path, :method =>'post') %> 
    <% @course_step.step.step_quiz.step_quiz_questions.each do |quiz_question| %> 
     <h3><%= quiz_question.value %></h3> 

     <% quiz_question.step_quiz_question_choices.each do |quiz_question_choice| %> 
     <%= radio_button_tag("quiz_questions[#{quiz_question.id}]", quiz_question_choice.value, false)%> 
     <%= quiz_question_choice.value%><br /> 
     <% end %> 

    <% end %> 
    <%= hidden_field_tag('step_quiz_id', @course_step.step.step_quiz.id)%> 
    <%= hidden_field_tag('started', Time.now.utc)%> 
    <%= submit_tag("Submit Quiz")%> 
</form> 

, 나는 단지 요약 데이터를 저장합니다 (I가 필요합니까를 데이터 모델의 일종으로이 방법에 오는 유효성을 검사?)

def create 
    correct = 0 
    incorrect = 0 
    params[:quiz_questions].each do |step_quiz_question_id, chosen_answer| 
     if StepQuizQuestion.find(step_quiz_question_id).correct?(chosen_answer) 
     correct += 1 
     else 
     incorrect += 1 
     end 
    end 

    QuizAttempt.create(:patient_id => current_user.id, :correct => correct, :incorrect => incorrect, :started => params[:started], :ended => Time.now, :step_quiz_id => params[:step_quiz_id]) 
    end 

아래 난에 저장하고 내 퀴즈 시도 모델입니다.

class QuizAttempt < ActiveRecord::Base 
    belongs_to :step_quiz 
    belongs_to :patient 

    attr_accessible :step_quiz_id, :patient_id, :started, :ended, :correct, :incorrect 
end 


# == Schema Information 
# 
# Table name: quiz_attempts 
# 
# id   :integer   not null, primary key 
# step_quiz_id :integer 
# patient_id :integer 
# started  :datetime 
# ended  :datetime 
# correct  :integer 
# incorrect :integer 
# created_at :datetime 
# updated_at :datetime 
# 

가 어떻게 코드를 많이하지 않고 양식을 확인할 것인가?

내 일반적인 접근 방식이 맞습니까?

+1

모델에서 이러한 종류의 유효성 검사를 수행하면 컨트롤러를보다 깨끗하게 유지 보수 할 수 있습니다. – RubyFanatic

+0

@rubyfanatic 질문 데이터가없는 모델에서 어떻게 유효성을 검사합니까? (그냥 요약 데이터) 위 모델 참조 –

답변

0

더 나은 접근 방법은 중첩 된 필드 방식 일 수 있다고 생각합니다.

정확하게 here (part 1)here (part 2) 에 대한 시나리오를 통해 질문과 답변이 포함 된 설문 조사를 시작할 수 있습니다.

유효성 검사를 위해 필요한 유효성 검사의 종류에 대한 자세한 정보를 제공해야합니다.

+0

측량의 백엔드 부분에 중첩 된 필드를 사용하고 있습니다. (실제로 해당 railscast!), 이제 프론트 엔드 부분 (사용자가 측량을 사용하는 곳)에 붙어 있습니다. 퀴즈 결과를 저장하는 데이터 모델이 사용자에게 표시하는 것과 매우 다르므로 모든 질문이 채워 졌는지 확인하는 데 어려움을 겪고 있습니다. 관련 모델로 내 질문을 업데이트했습니다. –

+0

그래서 유효성을 검사해야합니다. QuizAttempt에서 모든 질문에 답하고 비워 두지 않았습니다. 옳은? – tommasop

+0

글쎄, 퀴즈 시도에는 질문이없고 요약 데이터 만 있습니다. (위의 모델 참조) 모든 질문이 채워지는지 확인하는 것이 맞을 것입니다. –

관련 문제