这在 Rails 中看起来非常困难。
我认为这样的事情可能会起作用:
<%= f.fields_for :session_instructors do |si| %>
<%= si.collection_select :instructor_ids, current_user.instructors, :id, :name, multiple: true>
<% end %>
这应该创建一个表单元素,该元素将设置 sezzion[session_instructors_attributes][instructor_ids]。
虽然我不确定这是否真的是你想要的。我从未尝试过使用多重选择。如果不起作用,您也可以尝试摆脱fields_for
并只是使用f.collection_select
。如果您愿意使用复选框,我可以肯定地向您展示如何操作。
我希望这有帮助。
Edit:
我通常会这样做check_box
:
<%= f.fields_for :session_instructors do |si| %>
<%= si.hidden_field "instructor_ids[]" %>
<% current_user.instructors.each do |i| %>
<%= si.check_box "instructor_ids[]", i.id, i.sezzions.include?(@sezzion), id: "instructor_ids_#{i.id}" %>
<%= label_tag "instructor_ids_#{i.id}", i.name %>
<% end %>
<% end%>
有几个“陷阱”!用这个方法。编辑模型时,如果取消选择所有复选框,则根本不会发送参数。这就是为什么hidden_field
是必要的。此外,您需要确保每个表单元素都有唯一的id
场地。否则仅发送最后一个条目。这就是我自己手动设置该值的原因。
我复制粘贴然后编辑。希望我的语法足够接近,你可以让它工作。
最终编辑:
根据下面 Sayanee 的评论,答案比我想象的要简单一些:
<%= f.collection_select :instructor_ids, current_user.instructors, :id, :name, {}, {:multiple => true} %>