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

2 Answers 2

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 %>
Sign up to request clarification or add additional context in comments.

2 Comments

FYi, just a tiny spacesave/nice Ruby - you can shorten the selected option from @user.stores.map {|j| j.store_id } to @user.stores.map(&:store_id)
Thanks bro! But I think that you can use @user.store_ids instead pluck
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%' %>

2 Comments

I don't know if this was available when the question was asked but this should be the approved answer IMO.
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 :(

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.