Reputation: 4705
How can I get a collection select to show the submitted values as selected when the form redisplays? for example if a different field does not validate, the multi select box should show the selected items
<%= collection_select(:coupon, :activity_ids,
current_user.provider.activities, :id, :name,
{},
{:multiple => true, :class => 'chosens-select', :name=>'coupon[activity_ids][]'}) %>
Upvotes: 0
Views: 62
Reputation: 4705
Thanks to the guys posting answers, It pushed me to give up "fixing" the form and look again at my controller. Turns out I had made a mistake in the params statement:
def coupon_params
params.require(:coupon).permit(:id, :provider_id, :code, :max_uses, :max_uses_per_customer, :name, :expires_at,
:dollar_discount, :percent_discount, :starts_at, :activity_ids => {})
end
where it should be
def coupon_params
params.require(:coupon).permit(:id, :provider_id, :code, :max_uses, :max_uses_per_customer, :name, :expires_at,
:dollar_discount, :percent_discount, :starts_at, :activity_ids => [])
end
spot the difference? the activity_ids should be an array, not a hash
:activity_ids => []
Upvotes: 0
Reputation: 7232
I suggest to user SimpleForm. You will just do :
simple_form_for(my_model) do |f|
f.association :activities
f.button :submit
end
It will simplify all your forms.
Upvotes: 1
Reputation: 33542
Something like this would do.
<%= collection_select(:coupon, :activity_ids,current_user.provider.activities,
:id, :name, {:selected => @coupon.activity_ids}, {:multiple => true, :class => 'chosens-select', :name=>'coupon[activity_ids][]'}) %>
Upvotes: 1