Форма выбора для атрибута массива

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть модель Usergroup , которая имеет 2 атрибута, которые являются массивами:

 Usergroup.create(name: "Group 1", account_id: 7, hix_modules: ['cs-seh','cs-ddr'], users: [61,83,77])
  

Теперь я хочу создать форму для создания группы пользователей. Каков наилучший способ сделать это для атрибутов массива? Я подумываю об использовании selects в сочетании либо с Cocoon, либо со Стимулом в конце, чтобы добавить переменное количество users или hix_modules . Но для начала просто с одного фиксированного выбора: как это выглядит, чтобы отправить действительный массив на контроллер?

Ответ №1:

отредактируйте свою модель, чтобы сделать поле сериализованным в массив

  class Usergroup < ActiveRecord::Base
      serialize :hix_modules,Array
      serialize :users,Array
    end
  

протестируйте это в консоли

  a = Usergroup.new
 => #<Usergroup id: nil, hix_modules: [], users: [], name: nil, account_id: nil, created_at: nil, updated_at: nil> 
 a.hix_modules
 => [] 
 a.hix_modules << "cs-seh"
 => ["cs-seh"] 
  

Комментарии:

1. Хорошо, спасибо, но как будет выглядеть форма? Допустим, мне нужно поле выбора: f.select :hix_modules, options_for_select(@hix_modules)

Ответ №2:

Я решил это с помощью множественного выбора:

 = f.select :hix_modules, options_for_select(@hix_modules), { prompt: "Select module" }, { multiple: true, size: 10}
  

Это отправляет значения этих параметров:

  Parameters: {"usergroup"=>{"account_id"=>"7", "name"=>"Test", "hix_modules"=>["", "CS-Agenda", "CS-DDR"], "users"=>["", "65", "77", "46"]}