我在局部渲染三次(对于相同的三个场)中有一个窗体。但是,每个字段的占位符值理想情况下应该不同。因此,我试图传入一个局部变量,该局部变量将会对部分的每个渲染进行更改。创建动态局部变量并将其传递给局部变量
在控制器中,我创建一个这样的数组
@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