2011-03-21 122 views
0

編輯這Rails代碼工作中的Ruby 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| %> 

但這並不:(試圖用的form_for使用的功能的form_for()

<%= 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',特別是在標題中。 – 2011-03-21 22:13:03

回答

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 

那: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

爲什麼它在Ruby 1.8.7中工作呢?它對我所做的事沒有任何問題,這對我來說似乎是有效的。 form_for(@quiz_attempt_as_result_of_teranery,:url => ... etc) – 2011-03-21 16:46:27

+0

1.8.7正好處理不正確的括號。 – idlefingers 2011-03-21 16:51:31

相關問題