2011-03-21 123 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

相关问题