Question

The following works for having the current user's primary workgroup selected in a dropdown:

        <%= f.association :workgroup, :collection => Workgroup.all, :label_method => :group_name, :label => '1) Work Group', :selected => current_user.employee.priworkgroup_id %>

But, how do you set a :selected for grouped_collection_select ?

Code attempts:

        <%= f.grouped_collection_select :employee_id, Workgroup.order(:id), :employees, :group_name, :id, :employee_full_name, :selected => current_user.employee.id %>

        <%= f.grouped_collection_select :employee_id, Workgroup.order(:id), :employees, :group_name, :id, :employee_full_name, :include_blank => true, :selected => [current_user.employee.priworkgroup_id, current_user.employee.id] %>

UPDATE1

Reading about grouped_collection_select, I found selected_key

I tried this, but it didn't work:

<%= f.grouped_collection_select :employee_id, Workgroup.order(:id), :employees, :group_name, :id, :employee_full_name, :include_blank => true, :selected_key => current_user.employee.id %>

current_user.employee.id is = 5

Inspecting the html, the user I want selected has this:

<option value="5">John Jones</option>

UPDATE - thanks to Fenec.

I used the following:

<% options = option_groups_from_collection_for_select(Workgroup.order(:id),
       :employees, :group_name, :id, :employee_full_name, current_user.employee.id) %>
<%= select(:employee_id, :employees, options, include_blank: true) %>

And it displays correctly on the screen. But, the select doesn't update the data in the record.

I changed to this:

<%= f.select(:employee_id, :employees, options, include_blank: true) %>

And got undefined methodmerge'`

Was it helpful?

Solution

This worked:

<% options = option_groups_from_collection_for_select(Workgroup.order(:id),
       :employees, :group_name, :id, :employee_full_name, current_user.employee.id) %>

<%= f.select(:employee_id,  options, include_blank: true) %>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top