使用 AJAX - "No Results Found" 预填充 Select2

Pre populating Select2 using AJAX - "No Results Found"

我一直在按照此示例指南 (http://rails-select2-example.herokuapp.com/) 创建 select2 下拉菜单以从我的数据库中搜索国家/地区。

然而 select 框返回时总是空的 "No Results Found"。为什么它不会从 js/ajax 中获取值?

查看 (new.html.erb)

          <select class="form-control" id="country_select">
          </select>

控制器(Searches_controller.rb)

class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json

    def new
        @countries = Country.all
        respond_with @countries
    end
end

Javascript

  $('#country_select').select2({
    theme: "bootstrap",
    ajax: {
      url: "<%= user_searches_path(format: 'json') %>",
      dataType: "json",
      results: function(data, page) {
        return { results: $.map( data, function(country, i) { 
          return { id: country.id, text: country.name } 
        } ) }
      }
    }
  });

路线

resources :users do
    resources :searches
  end

搜索迁移

class CreateSearches < ActiveRecord::Migration

  def change
      t.string :country
   end
      add_index :searches, [:user_id, :created_at]

  end
end

而不是使用 AJAX,对于国家/地区搜索,您可以直接使用 Rails 辅助方法

参见下面的示例:

在您的 application_helper.rb 文件中创建一个方法:

def get_country
  Country.pluck(:name,:id)
end

在您的视图文件中:

<%= f.select :country_select, get_country, {prompt: 'Select Country'} %>

最后,添加如下js代码:

$("#country_select").select2({
  placeholder: "Select Country"
});

由于您在new action中编写了代码,您调用的URL是错误的, 如果你想从新的动作中调用,

class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json

    def new
        @countries = Country.all
        respond_with @countries
    end
end

要么像这样更改 ajax 调用中的 url,

  $('#country_select').select2({
    theme: "bootstrap",
    ajax: {
      url: "<%= new_user_search_path(format: 'json') %>",
      dataType: "json",
      results: function(data, page) {
        return { results: $.map( data, function(country, i) { 
          return { id: country.id, text: country.name } 
        } ) }
      }
    }
  });

或将代码更改为索引操作,

class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json

    def index
        @countries = Country.all
        respond_with @countries
    end
end

然后,你可以使用你的url,

  $('#country_select').select2({
    theme: "bootstrap",
    ajax: {
      url: "<%= user_searches_path(format: 'json') %>",
      dataType: "json",
      results: function(data, page) {
        return { results: $.map( data, function(country, i) { 
          return { id: country.id, text: country.name } 
        } ) }
      }
    }
  });