39

I am trying to have a multiple select box. select box will contain all the stores in the DB but the ones that the user belongs to will be selected.

I'm half way there. I got a select box which has all the stores in the database. I'm unable to select the ones that the user belongs to.

I have the following:

<%= select_tag 'stores[]', options_for_select(@stores.map {|s| [s.store_name, s.store_id]}, 
:selected => @user.stores.map {|j| [j.store_name, j.store_id]}), :multiple => true, :size => 
10 %>

I have a map with stores that a user belongs to. it is in:

@user.stores
Omnipresent
  • 29,434
  • 47
  • 142
  • 186

2 Answers2

63

after a fair amount of trial and error the following worked for me:

<%= select_tag 'stores[]', options_for_select(@stores.map { |s| [s.store_name, s.store_id] }, @user.stores.pluck(:id)), multiple: true, size: 10 %>
Sikandar Tariq
  • 1,296
  • 1
  • 13
  • 29
Omnipresent
  • 29,434
  • 47
  • 142
  • 186
16

Another way of doing this would be to use the options_from_collection_for_select helper method. It will look something like this:

<%= select_tag 'stores[]', options_from_collection_for_select(@stores, :store_id, :store_name, [4,5,6]), multiple: true, size: '10%' %>
Michael Yagudaev
  • 6,049
  • 3
  • 48
  • 53
  • I don't know if this was available when the question was asked but this should be the approved answer IMO. – gosukiwi Dec 10 '14 at 12:39
  • My pleasure @yagudaev. I was dissapointed that the list of selected entries requires to be ids and the :store_id cannot be applied to it :( – Karthik T Jan 20 '15 at 05:54