#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"]}