在Ruby on Rails和ElasticSearch中使用Select2 Ajax调用

问题描述 投票:0回答:1

我正在尝试执行select2搜索,以根据用户输入的数据动态产生结果。

当用户输入内容时,它将向执行针对ElasticSearch的查询的操作发送GET请求,然后ElasticSearch应该返回许多可以转换为JSON的对象。

尽管正在针对ElasticSearch执行查询,但它仍基于用户数据返回结果。我没有看到在select2搜索字段下方显示任何结果。

DashboardController.rb

def card_search
    if params[:query].present?
      cards = Elasticsearch::Model.search(params[:query]).records.first(1)
      hash = {}
      hash["results"] = cards.map{|v| v.serializable_hash(only: [:name]) }
      render json: hash.to_json
    else
      render json: []
    end
end

dashboard.html.erb

$(".js-data-example-ajax").select2({
  ajax: {
    url: "/dashboard/card_search",
    dataType: 'json',
    type: "GET",
    delay: 250,
    data: function (term, page) {
      return {
        query: term,
        page: page
      };
    },
    formatResult: function (item) { return item.name; },
    formatSelection: function (item) { return item.name; },
    results: function (data, page) {
      return data;
    },
    cache: true
  },
  placeholder: 'Search for a card',
  minimumInputLength: 1,
});

参数已从javascript成功传递到控制器中:

参数:{“ query” =>“ Charizard”,“ page” =>“ 1”}

[ElasticSearch产生的结果数组将转换为JSON:

“ {\” results \“:[{\” name \“:\” Charizard \“}]}”]]]] >>

当ElasticSearch返回一个数组并且JSON返回到AJAX调用时,将产生此错误:

select2.min.self-65a8000f26302b289c7ae3bdc1ef1831667c2613a3f8f9896177bb441612e583.js?body=1:22 Uncaught TypeError: Cannot read property 'toUpperCase' of undefined

我正在尝试执行select2搜索,以根据用户输入的数据动态产生结果。在用户键入内容时,它应向执行针对...

javascript ruby-on-rails ruby ajax jquery-select2
1个回答
0
投票

已解决!

即使我遵循官方的select2文档,我仍然意识到我的JSON格式错误:https://select2.org/data-sources/formats

© www.soinside.com 2019 - 2024. All rights reserved.