【问题标题】:Rails Select2 Case-insensitive AJAX AutocompleteRails Select2 不区分大小写的 AJAX 自动完成
【发布时间】:2014-01-26 04:05:09
【问题描述】:

我正在使用 Select2 实现自动完成功能,以从 JSON 获取 AJAX 加载的用户列表,以填充多值选择框。

到目前为止,通过参考以下来源,我已经能够实现大部分所需的功能:

http://gistflow.com/posts/428-autocomplete-with-rails-and-select2

http://luksurious.me/?p=46

我的问题是,自动完成查询区分大小写。我需要它不区分大小写。通过一些研究,我遇到了一个 GitHub 问题,其中 Select2 创建者解释说“应该在服务器端进行 Ajax 匹配”。

https://github.com/ivaynberg/select2/issues/884

经过多次试验和错误以及一些广泛的研究,我没有想出解决区分大小写问题的解决方案。不幸的是,“在服务器端匹配”有点让我头疼,我想知道是否有人可以提出解决这个问题的方法?

以下是我到目前为止的工作:

哈姆尔

= hidden_field :recipient_id, "", data: { source: users_path }, class: "select2-autocomplete"

CoffeeScript

 $ ->

   $('.select2-autocomplete').each (i, e) ->
     select = $(e)
     options = { 
       multiple: true 
     }

     options.ajax =
       url: select.data('source')
       dataType: 'json'
       data: (term, page) ->
         q: term
         page: page
         per: 5

       results: (data, page) ->
         results: data

     options.dropdownCssClass = 'bigdrop'
     select.select2 options

用户控制器

class UsersController < ApplicationController
  def index

    @users = User.order('name').finder(params[:q]).page(params[:page]).per(params[:per])

    respond_to do |format|
      format.html
      format.json { render json: @users }
    end

  end
end

用户模型

class User < ActiveRecord::Base
  scope :finder, lambda { |q| where("name like :q", q: "%#{q}%") }

  def as_json(options)
    { id: id, text: name }
  end
end

【问题讨论】:

    标签: ruby-on-rails ajax json autocomplete select2-rails


    【解决方案1】:

    想通了!

    答案在于自定义范围和查询中的 LIKE 子句。 LIKE 是区分大小写的子句。由于我使用的是 PostgreSQL,因此我能够将 LIKE 子句更改为不区分大小写的 ILIKE。

    因此,为了获得不区分大小写的匹配,用户模型应如下所示:

    用户模型

    class User < ActiveRecord::Base
      scope :finder, lambda { |q| where("name ILIKE :q", q: "%#{q}%") }
    
      def as_json(options)
        { id: id, text: name }
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2013-04-08
      • 1970-01-01
      • 2019-05-29
      • 2012-01-29
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多