2011-03-21 4 views
0

편집 레일 form_for()이 코드는 루비 1.8.7에서 작동하지만 1.9.2

주제에 명시된 바와 같이
<%= form_for ((@quiz_attempt.blank? ? QuizAttempt.new(:patient_id => current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt), :url => submit_quiz_course_course_step_path(@course_step.course, @course_step)) do |f| %> 

이 코드는 루비 1.8.7에서 완벽하게 실행되지만 1.9.2의 오류, 왜 알아낼 수있다.

코드 :

<%= render :partial => 'course_steps/header' %> 
<% if QuizAttempt.patient_taken_quiz?(current_user.id, @course_step.step.step_quiz.id) %> 
    <%= render :partial => 'course_steps/quiz_results' %> 
<% else %> 
<div id="QuizInstructions"> 
    <h3>Instructions</h3> 
    <p><%= @course_step.step.step_quiz.instructions %> </p> 
    </div> 
<div id="Quiz"> 
    <%= form_for (@quiz_attempt.blank? ? QuizAttempt.new(:patient_id => current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt, :url => submit_quiz_course_course_step_path(@course_step.course, @course_step)) do |f| %> 
    <%= render :partial => 'shared/error_messages', :object => f.object %> 
     <% @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_attempt[quiz_questions][#{quiz_question.id}]", quiz_question_choice.id, f.object.get_quiz_question_choice(quiz_question.id) == quiz_question_choice.id)%> 
      <%= quiz_question_choice.value %><br /> 
      <% end %> 
     <% end %> 
     <%= f.hidden_field(:patient_id)%> 
     <%= f.hidden_field(:step_quiz_id)%> 
     <%= f.hidden_field(:started)%> 
     <%= submit_tag("Submit Quiz")%> 
    <% end %> 
</div> 
<% end %> 
<%= render :partial => 'course_steps/footer' %> 

오류 메시지 :

Showing /Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb where line #10 raised: 

/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb:10: syntax error, unexpected ',', expecting ')' 
....step_quiz.id) : @quiz_attempt, :url => submit_quiz_course_c... 
...        ^
/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb:10: syntax error, unexpected ')', expecting keyword_end 
...rse_step.course, @course_step)) do |f| @output_buffer.safe_c... 
...        ^
/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb:27: syntax error, unexpected keyword_ensure, expecting $end 
Extracted source (around line #10): 

7:  <p><%= @course_step.step.step_quiz.instructions %> </p> 
8: </div> 
9: <div id="Quiz"> 
10:  <%= form_for (@quiz_attempt.blank? ? QuizAttempt.new(:patient_id => current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt, :url => submit_quiz_course_course_step_path(@course_step.course, @course_step)) do |f| %> 
11:  <%= render :partial => 'shared/error_messages', :object => f.object %> 
12:   <% @course_step.step.step_quiz.step_quiz_questions.each do |quiz_question| %> 
13:    <h3><%= quiz_question.value %></h3> 
+0

특히 제목에'ALL CAPS '를 사용하지 마십시오. –

답변

1

당신이 그 원에서 조금 일을 분할하는 경우 읽기 양측이 쉽게하기 위해, 문제는 분명해진다. 이것을 고려하십시오 ...

new_quiz_attempt = QuizAttempt.new(:patient_id => current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) 

form_for (@quiz_attempt.blank? ? new_quiz_attempt : @quiz_attempt, :url => submit_quiz_course_course_step_path(@course_step.course, @course_step)) do 

That : 해시의 URL 부분은 단지 속하지 않습니다. 대괄호가 잘못된 위치에 있습니다.

form_for (@quiz_attempt.blank? ? new_quiz_attempt : @quiz_attempt), :url => submit_quiz_course_course_step_path(@course_step.course, @course_step) do 

그러나 당신이 더 잘 양식을 작성할 수 있도록 컨트롤러에서 제대로 @quiz_attempt을 설정하는 것이 다루는 훨씬 더 좋은 방법 :이 당신이 달성하고자하는지의 라인을 따라 더 가정 :

# Controller 
@quiz_attempt ||= QuizAttempt.new(:patient_id => current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) 

# View 
form_for @quiz_attempt, :url => submit_quiz_course_course_step_path(@course_step.course, @course_step) do 
+0

왜 루비 1.8.7에서 작동 했습니까? 그때 내가 한 일에는 아무런 문제가 없었습니다. form_for (@quiz_attempt_as_result_of_teranery, : url => ... etc) –

+0

1.8.7은 잘못된 대괄호를 좀 더 정상적으로 처리합니다. – idlefingers

관련 문제