2010-05-26 3 views
0

나는 퀴즈 어플리케이션을 평가하려고합니다. 저는 질문 모델을 가지고 질문하고 (실제 질문), 4 가지 선택 사항 (a-d) 및 정답 (문자열)을 묻습니다.레일즈 - RoR에서 온라인 퀴즈 점수 내기

보기에서 나는 올바른 대답 선택 (이것은 기능에 대한 테스트 일뿐입니다)을 표시 한 다음 사용자 대답 선택을 허용하는 text_field와 버튼이있는 색인 작업을 새로 고치기 위해 4 개의 질문을 표시했습니다. 지금은 점수 논리.

- 내가 text_type을 form_tag에 넣어야합니까?

<p>1. <%= h @question.q1 %></p> 
<p>2. <%= h @question.q2 %></p> 
<p>3. <%= h @question.q3 %></p> 
<p>4. <%= h @question.q4 %></p> 
<p>Answer: <%= h @question.correct %></p> 
<%= text_field_tag :choice, params[:choice] %> 
<%= button_to "Grade", {:controller => 'site', :action => "index"} %> 
<p> <%= @answer %></p> 

Heres는 인덱스 컨트롤러 액션

def index 
     @question = Question.find(1) 
     if @question.correct == params[:choice] 
      @answer = 'right' 
     else 
       @answer = 'wrong' 
     end 
end 

그것 정말 작동하지 않습니다. 텍스트 필드는 'a'나 'c'와 같은 문자를 선택하여 데이터베이스의 정답과 비교합니다.

나는 radiobuttons로 작업하는 것이 좋겠지 만, 나는 걸음마 단계를 밟을 것이라고 생각했기 때문에 나는 레일에 초보자입니다.

아무도 나를 문자열로 수정하거나 라디오 버튼을 통해 수정할 수 있다면 정말 감사하겠습니다.

답변

2

내가 그것을 할 것입니다 방법은 다음과 같습니다

# in app/controller/QuestionsController 
def index 
    @question = Question.find(1) 
    @grade = params[:choice] == @question.answer ? 'PASS' : 'FAIL' 
end 

그것은 당신의 config/routes.rb 파일에 명명 된 경로가 필요합니다 : 다음

map.questions 'questions', :controller => 'questions', :action => 'index' 

하고, app/views/index.html.erb에 :

<h2><%=h @question.question_text %></h2> 

<ol> 
    <li><%=h @question.q1 %></li> 
    <li><%=h @question.q2 %></li> 
    <li><%=h @question.q3 %></li> 
    <li><%=h @question.q4 %></li> 
</ol> 

<p> 
    Correct answer <%=h @question.correct %> 
</p> 

<% form_tag do %> 
    <p>Choice? <%= text_field_tag :choice %></p> 
    <%= submit_tag 'Grade' %> 
<% end %> 

<p>Grade: <%= @grade %></p> 

I routes.rb 파일도 제공한다면 훨씬 더 구체적인 도움을 줄 수 있습니다. 나머지 컨트롤러 코드로 위의 대답은 RESTful이 아닙니다. 이것이 모두 중요하다면, 라우트 구성은 컨트롤러 코드와 다를 수 있습니다. 또한 RESTful 디자인을 사용하면보기에서 form_for 메서드 호출을 사용할 수 있습니다. 요즘에는 더 표준 적입니다.

0

현재 귀하의 코드는 입력 된 텍스트를 무시합니다. 사용자 입력은 양식 (양식 & 제출) 또는 get (양식 사용 가능)을 통해 게시되어야합니다.

이 경우 양식 태그에 넣고 제출 버튼을 추가하는 것이 좋습니다. 컨트롤러에 필요한 동작을 추가하고 (save이 경우), 데이터 유효성을 검사 한 다음 인덱스 동작을 렌더링합니다. 여기