Передать идентификаторы в Rails с помощью Select2

Это может быть фиктивный вопрос. У меня есть поле с несколькими значениями в форме со следующими настройками Select2

jQuery('#mymodel_thing_ids').select2
  multiple: true
  placeholder: "Select things"
  minimumResultsForSearch: -1
  ajax:
    url: "/things.json"
    dataType: "json"
    results: (data, page) ->
      results: data
  formatResult: (data) -> data.name
  formatSelection: (data) -> data.name

При отправке формы с выбранными вещами я получаю

"thing_ids"=>"[],3,2"

то есть начальное значение (пустые квадратные скобки) и идентификаторы выбранных вещей. Но я хотел бы иметь следующие

"thing_ids"=>"[3,2]"

Возможно ли это с Select2? И что я делаю не так?

ОБНОВЛЕНИЕ

Чтобы избежать фигурных скобок в начале, используйте value="" при создании элемента ввода.


person Misha Slyusarev    schedule 13.02.2014    source источник
comment
Попробуйте это data.serialize() . см. здесь api.jquery.com/serialize   -  person Thaha kp    schedule 13.02.2014


Ответы (1)


Проблема в том, что Select2 отправляет обратно строковый список элементов, например. "thing_ids" => "1,2,3". Что я делаю при использовании Select2 таким образом, так это создаю методы доступа для thing_tokens и thing_tokens=, которые выглядят примерно так:

def thing_tokens
  thing_ids.join(",")
end

def thing_tokens=(token_string)
  self.thing_ids = token_string.split(",")
end

Затем в своей форме вы сделаете его входным для :thing_tokens вместо thing_ids. Если вы используете Rails 4, убедитесь, что вы также разрешили :thing_tokens в своем контроллере.

person Josh Kovach    schedule 13.02.2014
comment
Этот ответ действительно решает проблему, делая значение строкой и, таким образом, удаляя [] из значения в первую очередь. - person rogermushroom; 19.02.2014
comment
Вы можете избежать этих фигурных скобок, задав для входного значения пустую строку, т. е. ‹input id=mymodel_thing_tokens type=hidden value=› - person Misha Slyusarev; 20.02.2014