答案最终是更多的 jQuery。这是我的解决方案。
在原始形式中:
<div id="int_skill_container" >
<%= f.simple_fields_for :int_skills do |skill| %>
<%= render 'int_skill_fields', :f => skill %>
<% end %>
<%= link_to_add_association "Add a Skill Pair", f, :interpreter_skills, :partial => 'int_skill_fields', :class => 'btn btn-primary' %>
</div>
田野:
<div class='nested-fields'>
...
<td>
<b><span class="agt_prof_slider_val"><%= f.object.proficiency or 5 %></span></b>
<%= f.input_field :proficiency, class: 'agt_prof_slider' %>
</td>
...
</div>
和 jQuery
mySlider = $('.agt_prof_slider').slider()
mySlider.each ->
init_val = parseInt($(this).closest("td").find('.agt_prof_slider_val').text())
$(this).slider('setValue', init_val)
$('.agt_prof_slider').on 'slide', (slideEvt) ->
$(this).closest("td").find('.agt_prof_slider_val').text slideEvt.value
$('#int_skill_container').on 'cocoon:after-insert', (e, insertedItem) ->
insertedItem.find('.agt_prof_slider').first().slider()
insertedItem.find('.agt_prof_slider').first().on 'slide', (slideEvt) ->
$(this).closest("td").find('.agt_prof_slider_val').text slideEvt.value
我在滑块旁边显示值。在编辑表单中,这些值是在初始表单屏幕中设置的,所以我抓住它来使用“setValue”设置初始滑块值。
jQuery 内容的第二部分实际上是相同的,但是由于我使用 cocoon 来表示嵌套变量,因此我需要在 cocoon 回调中基本上重复代码。这里默认的滑块值 5 很好。