我在局部渲染三次(對於相同的三個場)中有一個窗體。但是,每個字段的佔位符值理想情況下應該不同。因此,我試圖傳入一個局部變量,該局部變量將會對部分的每個渲染進行更改。創建動態局部變量並將其傳遞給局部變量
在控制器中,我創建一個這樣的數組
@placeholder = %w[ firstplaceholder, secondplaceholder, thirdplaceholder]
我然後通過陣列試圖循環而渲染局部
<%= f.fields_for :answers do |builder| %>
<% @placeholder.each do |k, arrayindex| %>
arrayindex = @placeholder.index(k)
<%= render :partial => 'answer_fields', :locals => { :f => builder, :myplaceholder => @placeholder[arrayindex] } %>
<% end %>
<% end %>
跑過arrayindex到@placeholder產生此錯誤
no implicit conversion from nil to integer
所以我猜數組變量是'無'。爲什麼?
在partial中,在重新填充錯誤消息和表單字段的情況下,不會有佔位符(如果沒有錯誤,只會在控制器中創建@placeholder實例變量),所以我首先檢查是否@placeholder實例變量存在,並嘗試將佔位符設置爲循環中創建的索引,但是,由於在傳入數組索引時發生錯誤,所以它不起作用。可能還有其他的問題:)
<% if @placeholder ? myplaceholder = @placeholder[arrayindex] : myplaceholder = "answer choice" %>
<%= f.text_field :content, :class => 'span3', :rows => 1, :placeholder => myplaceholder %>
<%= f.label :correctanswer, "Correct?" %>
<%= f.check_box :correctanswer, :class => 'span1' %>
<% end %>
更新
在控制器中,我建立的提問模式三個的答案領域。因此,局部因此自動呈現三次。如果通過@placeholder陣列I環纏部分,它的渲染部分,很多次3 * 3
3.times {@question.answers.build}
我想我忘了包含一些關鍵信息。如果您有時間,請參閱OP中的更新。 – Leahcim 2013-03-02 04:10:23