Rails multi select defaults

I am working on a script that allows an administrator to assign several languages ​​to a user.

I have my multi select that works like this:

<%= fields_for :users_languages do |u| %>
        <div class="field">
        <%= @lang_list.inspect %>
            <%= u.label :Assign_Languages %><br />
            <%= select_tag :language_id, options_for_select(Language.all.collect {|lang| [lang.english, lang.id]}),:multiple => true, :prompt => 'Select Language' %>
         </div>
    <% end %>

But when I switch to user editing, their languages ​​are not displayed automatically. How can i do this?

+2
source share
1 answer

It turned out by doing the following:

Controller:

def edit
    @user = User.find(params[:id])
    @users_langs = UsersLanguage.where("user_id = ?", params[:id])
    @lang_list = []

    @users_langs.each do |langs|
      @lang_list << langs.language_id
    end
  end

I created an array variable called @lang_list, which I then used in my view to indicate my multi-selection which fields are automatically highlighted.

View:

<%= fields_for :users_languages do |u| %>
  <div class="field">
      <%= u.label :Assign_Languages %><br />
      <%= select_tag :language_id, options_for_select(Language.all.collect {|lang| [lang.english, lang.id]}, @lang_list),:multiple => true, :prompt => 'Select Language' %>
   </div>
 <% end %>

Hope this helps someone!

+6
source

Source: https://habr.com/ru/post/1769776/


All Articles