我有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()
因此,如您所见,我可以选择国家/地区或添加一个(如果没有可用的国家/地区)。此外,我正在从输入的val
加载初始值,并从initSelection
内部的data-id
加载id。
当我选择国家/地区并提交表单时,一切正常:post_params['country']
等于所选国家/地区的 ID,但是如果我提交表单而不更改所选值(保留默认值),则post_params['country']
持有value
,而不是id
。
我错在哪里以及如何解决?
将输入更改为:
= 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-title
而不是data-id
(当然,您可以保留data-id
原封不动以备将来使用)。此外,您还需要重构initSelection
函数以使用这些新值:
initSelection: (element, callback) ->
callback
id: $(element).val(),
title: $(element).data('title')