2011-03-21 62 views
-2

(唯一的区别是在第二个版本中,我试图用parens()调用form_form,第一个示例中我没有使用parens。)我知道我可以清理我正在做的事情这个,但是已经被不同的线程覆盖了。Ruby on rails form_for oddness

这个工程:

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

一个函数的错误

ERROR:/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> 
Trace of template inclusion: app/views/course_steps/show_quiz.html.erb 
+1

这几乎是你最后一个问题的确切副本http://stackoverflow.com/questions/5380307/code-works-in-ruby-1-8-7-but-not-1-9-2- ruby-on-rails – idlefingers 2011-03-21 17:31:34

+0

任何体面的答案都会复制你在其他问题中提供给你的答案。 – mark 2011-03-21 17:32:13

回答

1

我有不知道为什么解析器不能识别你想要做什么。

而不是试图绘制出ruby的解析器的所有错综复杂,为什么不试图使代码可读?

最简单的方法可能是使用||=操作符,并将此逻辑移入控制器。

比较你的第一个例子中的扩展形式:

Controller: 

Not Shown 

View: 

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

要:

Controller: 
#... near the end of the relevant action 
@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 |f| %> 

这样,你可以使用无括号样式而不具有迷惑?:位堵塞一切。

希望有所帮助。


*顺便说一句,这里的:

我的想法是怎么了?

form_for()不一定一样form_for(),所以它可能是感到困惑是否你”再试图说

“致电form_for结果(@quiz_attempt, :url => url) #which is not valid syntax

“请致电form_for与论据(@quiz_attempt, {:url => url}) #which is what the real arguments look like