2016-09-05 1 views
0

Я использую select2 для множественного выбора. Моя проблема в том, что я могу выбрать несколько значений из json-данных, и я могу сохранить эти данные в соответствующих столбцах модели. Но когда я хочу обновить эту модель, выбранные данные не отображаются.Несколько выбранных данных не отображаются

некоторая часть моих данных JSon:

{ 
- categories:[ 
    - { 
     id:7, 
     name:"Eğitim Bilimleri Enstitüsü" 
    }, 
    - { 
     id: 8, 
     name: "Eğitim Yönetim Teftişi ve Planlaması 1. Yarıyıl" 
    }, 
    ... 
    ] 
} 

У меня есть класс Moodle (это не наследство от ActiveRecord, просто класс, и у него есть некоторые функции, которые возвращают данные в формате JSON). Мне интересно, правильно ли он подходит.

в содержании моей формы:

<%= simple_form_for(@period) do |f| %> 
... 
    <%= f.input :moodle_connect_ids, collection: Moodle.categories.map {|p| [ p['name'], p['id'] ] }, input_html: {multiple: true} %> 
... 
<% end %> 

я явно установить moodle_connect_ids быть массивом в мой контроллер:

params.require(:period).permit(..., :moodle_connect_ids => []) 

в содержании моего файла .js:

$("#period_moodle_connect_ids").select2({ 
    placeholder: "Moodle Dönem Bağlantılarını Seçiniz", 
    multiple: true, 
    allowClear: true 
}); 

Когда я выбираю несколько значений и сохраняю свою модель, значение столбца выглядит так:

> Period.last 
=> #<Period:0x007fcf53a4d830 
id: 25, 
... 
moodle_connect_ids: "[\"\", \"85\", \"120\"]" 
... 

Неужели я ошибаюсь? У вас есть какие-то предложения?

ответ

0

Я выяснил, как это сделать.

Я добавил выбранный вариант в f.input:

selected: @period.moodle_connect_ids? ? JSON.parse(@period.moodle_connect_ids).map(&:to_i) : [] 

последнее состояние на вход в:

<%= f.input :moodle_connect_ids, collection: Moodle.categories.map {|p| [ p['name'], p['id'] ] }, input_html: {multiple: true}, selected: @period.moodle_connect_ids? ? @period.moodle_connect_ids.map(&:to_i) : [] %>