Есть приложение на Ruby on Rails, где можно на странице редактирования поста задать посту страну, вот код input'a (использую simple form):
= f.input :country, label: t("heading.country"), as: :string, input_html: { class: 'select2', data: { allowadd: true, depth: 0, id: post.location.country.id, url: search_locations_path } }
В CoffeeScript'e я подключаю select2
loadSelect2 = (selector = '.select2') ->
$(@).select2
ajax:
data: (term, page) ->
search: term
depth: $(@).data('depth')
results: (data, page) ->
results: data
url: $(@).data('url')
createSearchChoice: (term, data) ->
if $(data).filter(->
@title.localeCompare(term) is 0
).length is 0
id: term
title: term
createSearchChoicePosition: 'bottom'
formatResult: (item) ->
item.title
formatSelection: (item) ->
item.title
initSelection: (element, callback) ->
callback
id: $(element).data('id')
title: $(element).val()
То же самое, но в ванильном:
var loadSelect2;
loadSelect2 = function(selector) {
if (selector == null) {
selector = '.select2';
}
return $(this).select2({
ajax: {
data: function(term, page) {
return {
search: term,
depth: $(this).data('depth')
};
},
results: function(data, page) {
return {
results: data
};
},
url: $(this).data('url')
},
createSearchChoice: function(term, data) {
if ($(data).filter(function() {
return this.title.localeCompare(term) === 0;
}).length === 0) {
return {
id: term,
title: term
};
}
},
createSearchChoicePosition: 'bottom',
formatResult: function(item) {
return item.title;
},
formatSelection: function(item) {
return item.title;
},
initSelection: function(element, callback) {
return callback({
id: $(element).data('id'),
title: $(element).val()
});
}
});
};
Так, я могу выбрать страну из списка или добавить вручную, если в списке нет вариантов. Начальные значения я получаю из val() input'a и data-id input'a, это описывается в функции initSelection.
Если я выберу какую-либо страну из списка и отправлю форму, то всё работает как задумывалось: в переменной post_params['country'] оказывается id, то есть число. Если же я отправлю форму не меняя выбора страны, то вместо id я получаю value выбранной по умолчанию страны, а нужно id.
Что я делаю не так и как исправить?