3

У меня есть Rails приложение, где я могу выбрать страну:Выбор2 представление значения вместо идентификатора

= 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 } }

Выбор2 прикреплен к этому элементу по:

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() 

Итак, как вы видите, я могу выбрать страну или добавить ее (если в стране нет страны). Также я загружаю начальное значение из ввода val и id от data-id внутри initSelection.

Когда я выбираю страну и отправить форму все работает: post_params['country'] равно идентификатор выбранной страны, но если я отправить форму без изменения выбранного значения (оставляя по умолчанию), затем post_params['country'] helds value, вместо id.

Где я ошибаюсь и как это исправить?

+0

где рельсы код создает вход? –

+0

@ МалъСкрылевъ добавил код создания ввода –

+0

кажется, что вход не является сборником –

ответ

1

Изменить вклад:

= f.input :country, label: t("heading.country"), as: :string, input_html: { value: @post.location.country.id, class: 'select2', data: { allowadd: true, depth: 0, title: @post.location.country.title, url: search_locations_path } }

... так что в значении входного в вы будете хранить id из первоначально выбранного элемента и атрибутов данных вместо data-id вы будете хранить название data-title элемента (из Конечно, вы можете оставить data-id неиспользованным для будущего использования). Кроме того, необходимо реорганизовать initSelection функции, чтобы использовать эти новые значения по состоянию на:

initSelection: (element, callback) -> callback id: $(element).val(), title: $(element).data('title')

+0

Это работает, Спасибо! –

Смежные вопросы