3

我有Rails應用程序,在這裏我能夠從選擇國家:選擇二提交值,而不是ID

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

選擇二由連接到這個元素:

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

所以,正如你看到的,我能夠選擇國家或添加一個(如果沒有可用的國家)。另外我從data-id裏面加載從initSelection輸入的val初始值和ID。

當我選擇的國家和提交表單一切正常:post_params['country']等於所選國家的ID,但如果我提交表單,而不改變選擇的值(保留默認的一個),然後post_params['country'] helds value,而不是id

如果我錯了,如何解決呢?

+0

其中Rails代碼創建輸入? – 2014-12-05 10:53:07

+0

@МалъСкрылевъ添加的代碼創建輸入 – 2014-12-05 10:58:35

+0

似乎輸入不是一個集合 – 2014-12-05 11:14:03

回答

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你將存儲元素的title data-title(中當然,你可以離開data-id完好以備將來使用)。 你也需要重構initSelection功能,使用這些新的價值觀爲:

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

+0

該工程,謝謝! – 2014-12-13 11:48:06