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