这个Rails代码适用于Ruby 1.8.7,但不适用于1.9.2

编辑

这有效:

 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()

  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| %> 

如主题中所述,代码在Ruby 1.8.7中运行完美,但在1.9.2中有错误,似乎无法弄清楚原因。

代码

  'course_steps/header' %>   'course_steps/quiz_results' %>  

Instructions

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| %> 'shared/error_messages', :object => f.object %>


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

8:
9:
10: 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: 'shared/error_messages', :object => f.object %> 12: 13:

如果你在三元组中分解一些东西以使双方更容易阅读,问题就会变得清晰。 考虑一下……

 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的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