簡體   English   中英

該Rails代碼在Ruby 1.8.7中有效,但在1.9.2中不起作用

[英]This Rails code works in Ruby 1.8.7 but not 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| %>

如主題所述,該代碼可以在Ruby 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>

如果您在該三元組中進行一點拆分以使雙方都更容易閱讀,那么問題就會變得很明顯。 考慮一下...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM