Вот чем я закончил.Это мой collection_select
.
<%= collection_select :collection,
:map_ids,
@collection.user.maps,
:id,
:title,
{ :selected => nil },
{ :class => "map_select hiddenElement", :multiple => true, :size => '10', :name => 'collection[map_ids][]' }
Вот как создаются мои отдельные контейнеры:
<ol id="selectable">
<% for map in current_user.maps %>
<% if @collection.maps.include? map %>
<li class="singleMapContainer ui-selected">
<% else %>
<li class="singleMapContainer">
<% end %>
<div class="singleMapInfo">
<span class="mapId" style="display:none;"><%= map.id %></span>
<strong><%= map.title %></strong><br>
<%= map.created_at %><br>
<%= image_tag(map.thumbnail_url) %>
</div>
</li>
<% end %>
</ol>
Вот Javascript, который синхронизирует их при отправке формы:
$("#new_collection, .edit_collection").submit(function(){
// iterate over each selected map container element
$("li.ui-selected").each(function(){
var mapId = $(this).find("span.mapId").html(); // find the map ID
$("#collection_map_ids option[value='" + mapId + "']:first")[0].selected = true; // synchronize the multiple select box
});
return true;
});