使用 rails 恢复 select2 4.0.3 的已保存/初始值

restore saved / initial value for select2 4.0.3 with rails

我正在使用 select2 版本 4.0.3

下面是我的 html 使用 select 标签 rails 助手

<%= f.select(:hotel_id, [], {},  :class => 'select2-autocomplete' ) %>

下面是我的 coffeescript(正在创建新的)

  $('.select2-autocomplete').select2
  multiple: false
  width: "98%"
  placeholder: "Type Hotel name"
  minimumInputLength: 3
  ajax:
    url: '/hotels/search_name.json'
    dataType: 'json'
    delay: 250
    data: (params) ->
      q: params.term
    processResults: (data, params) ->
      results: $.map data, (item)->
        id: item.id
        text: item.name

之前它使用 initSelection 为 select2 版本 3.5.3 完成,但随后版本 4.0.3 发生了变化,我确实阅读了 documentation 但仍然没有好的结果,

我的问题是当用户编辑页面时,我需要恢复以前的 select 值并显示它。

最后在如何使用 select2 版本 4 恢复值的过程中反复试验之后,它可能不干净但它有效

<% if f.object.persisted? && f.object.hotel_id  %>
  <% if f.object.hotel_id > 0 %>
    <% value = f.object.hotel_id  %>
    <% text  = Hotel.find(value).name %>
  <% end %>
<% end %>
<%= f.select(:hotel_id, options_for_select([["#{text}", value.to_s]]),  {selected: value},  :class => 'select2-autocomplete' ) %>

关键答案是底线,

  • 使用 f.select、
  • 使用 option_for_select 生成选项
  • 确保选项使用的是字符串 value.to_s
  • 在选项下使用 { selected: value}

希望它可以帮助其他 rails 使用 select2 和 ajax 搜索的用户