此 Rails 代码适用于 Ruby 1.8.7 但不适用于 1.9.2 [英] This Rails code works in Ruby 1.8.7 but not 1.9.2

查看:53
本文介绍了此 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) 做 |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)) 做 |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) %><%=渲染:部分=>'course_steps/quiz_results'%><%其他%><div id="测验说明"><h3>说明</h3><p><%=@course_step.step.step_quiz.instructions %></p>

<div id="测验"><%= 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)) 做 |f|%><%=渲染:部分=>'shared/error_messages', :object =>f.对象%><% @course_step.step.step_quiz.step_quiz_questions.each 做 |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/><%结束%><%结束%><%= f.hidden_​​field(:patient_id)%><%= f.hidden_​​field(:step_quiz_id)%><%= f.hidden_​​field(:started)%><%= submit_tag("提交测验")%><%结束%>

<%结束%><%=渲染:部分=>'course_steps/footer' %>

错误信息:

显示/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb 其中第 10 行提出:/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb:10:语法错误,意外的,",期待)"....step_quiz.id) : @quiz_attempt, :url =>submit_quiz_course_c...... ^/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb:10:语法错误,意外的')',期待keyword_end...rse_step.course, @course_step)) 做 |f|@output_buffer.safe_c...... ^/Users/cmuench/rails_projects/infosurge/app/views/course_steps/show_quiz.html.erb:27:语法错误,意外的keyword_ensure,期待$end提取的源代码(大约第 10 行):7:<p><%=@course_step.step.step_quiz.instructions %></p>8:</div>9:<div id="测验">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)) 做 |f|%>11:<%=渲染:部分=>'shared/error_messages', :object =>f.对象%>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)) 做

散列的 :url 部分不属于.括号在错误的位置.我认为这更符合您想要实现的目标:

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

但是更好的处理方法是在控制器中正确设置 @quiz_attempt 以便您可以更好地编写表单:

# 控制器@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, :url =>submit_quiz_course_course_step_path(@course_step.course, @course_step) 做

Edit:

This works:

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

But this doesn't: (Trying to use form_for with as a function 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| %>

As stated in subject, the code runs perfectly in Ruby 1.8.7, but has errors in 1.9.2, can't seem to figure out why.

Code:

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

Error message:

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>

解决方案

If you split things up a little in that ternary to make both sides easier to read, the problem becomes clear. Consider this...

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 part of the hash just doesn't belong. The brackets are in the wrong place. I assume this is more along the lines of what you're wanting to achieve:

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

But a much nicer way of dealing with this would be to set @quiz_attempt properly in your controller so you can write the form more nicely:

# 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

这篇关于此 Rails 代码适用于 Ruby 1.8.7 但不适用于 1.9.2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆