数据表过滤 - 智能搜索中的完全匹配

时间:2014-10-29 15:43:38

标签: javascript ruby-on-rails coffeescript datatables jquery-datatables

我想坚持使用数据表所具有的智能搜索(搜索我输入)。问题是,我的一个列显示的值如:人员和人员。因此,对于百万条记录,当我输入“人物”时,我很难通过显示“人员”的列来挖掘“人”。

我不想只完全匹配。这会让我输入全名,在某些情况下输入“person-xyz-123”。

有没有办法让我在引号中指定说“人”并告诉数据表我只想在输入引号时进行精确搜索并仍然保持正常搜索?

Coffeescript档案:

$(xyz).ready ->
    $('#xyz').dataTable
      bProcessing: true
      bServerSide: true
      sDom: "<\"top\"T>rt<\"bottom\"lip><\"clear\">"
      oTableTools:
        sSwfPath: "../TableTools-2.1.5/media/swf/copy_csv_xls_pdf.swf"
      sAjaxSource: $('#xyz').data('source')
    .columnFilter aoColumns: [
      { type: "text" },
      { type: "text" },
      { type: "text" },
      { type: "text" },
      { type: "text" },
      { type: "text" },
      { type: "text" },
      { type: "text" },
      {
      type: "select"
      values: [
        {"value": 0, "label": "Failed"},
        {"value": 1, "label": "Completed"},
        {"value": 2, "label": "Processing"}
      ]
      }
    ]
    return

2 个答案:

答案 0 :(得分:1)

(我假设一个1.9 API,因为这似乎是你在问题中使用的。)

可以执行您想要的操作,但这意味着修改服务器端代码,以响应对您作为sAjaxSource选项提供的URL的请求。它必须执行这些检查:

  1. 如果sSearch参数(添加到sAjaxSource网址)包含双引号中的术语,例如"person",则删除双引号并完全执行匹配。

  2. 否则执行部分匹配。

  3. DataTables发送到服务器的完整文档以及它所期望的是here

答案 1 :(得分:0)

我创建了这个辅助函数来解决我的问题:

  def filter_helper(data)
    return "#{data[:name]} = :search", search: "#{params[data[:dt_name]].gsub!(/^\"|\"?$/, '') }" if "#{params[data[:dt_name]]}".chars.first == "\""
    return "#{data[:name]} like :search", search: "%#{params[data[:dt_name]]}%" if "#{params[data[:dt_name]]}".chars.first != "\""
  end