After your { :prompt => "Please select"}
add another hash with html options e.g.
<%= f.select(:TYPE, [['Type A', 'Type A'],
['Type B', 'Type B'],
['Type C', 'Type C'],
['Type D', 'Type D'],
['Type E', 'Type E']
],{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }
) %>
Once you've done this you might want to move your :prompt
option (keep the empty {}
though so that html attributes don't get treated as Rails options.)
Also you'll need to ensure your controller code is correctly accepting and handling multiple values.
In case of collection, try
<%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] },
{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }) %>
I have a fully working example (including preselection when editing the object), when:
Object
is the considered objectsimilar_ids
is the key to relations, and is a string
In the form:
form_for(@object) do |f|
= f.select :similar_ids, options_from_collection_for_select(Object.all, :id, :name, {:selected => @object.similar_ids.split(';')}), {}, {:multiple => true, :size => 4, :name => 'object[similar_ids][]'}
And in the Object.rb
model:
class Object < ActiveRecord::Base
before_save :handle_similars
def handle_similars
self.similar_ids = self.similar_ids.select(&:present?).join(';')
# .select(&:present?) is necessary to avoid empty objects to be stored
end
def similars
self.class.find(self.similar_ids.split(';'))
end
end
These posts helped me out:
Hope it helps
HTML
<%= form.select(:product_ids, Product.all.collect {|p| [ p.name, p.id ] },
{ :prompt => "Please select"},
{ :multiple => true, :size => 5 }) %>
Controller
@category = Category.new(category_params)
def category_params
params.require(:category).permit(:name, product_ids: [])
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With