4

我有 Rails 应用程序,可以从中选择国家/地区:

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

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

因此,如您所见,我可以选择国家或添加一个国家(如果没有可用的国家)。此外,我正在从 input 加载初始值,并从inside加载valid 。data-idinitSelection

当我选择国家并提交表单时,一切正常:post_params['country']等于所选国家/地区的 id,但如果我提交表单而不更改所选值(保留默认值),则post_params['country']保留value,而不是id.

我在哪里错了,如何解决?

4

1 回答 1

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

于 2014-12-13T00:43:00.310 回答