如何将自定义服务器端筛选器添加到数据表

时间:2016-06-14 01:41:13

标签: jquery ruby-on-rails coffeescript datatables

我有一个基于AJAX的数据表,我想对其应用额外的过滤。到目前为止,我只发现了客户端或过时的例子。我无法理解搜索是如何实际执行的,以及如何添加过滤器以实现功能。

一个简单的例子,我试图在我的SKU数据表中添加供应商过滤器。我已经使用供应商名称填充了一个选择框。如果选择供应商,我只想显示供应商的SKU。此外,用户应该能够使用搜索来查看此供应商的结果。如何过滤我的结果?

这是我的coffeescript(更新):

$ ->
  $('#vendor-skus-table').DataTable
  processing: true
  serverSide: true
  retrieve: true
  pagingType: 'full_numbers'
  ajax: data: (d) ->
    d.sku = $('#vendor-skus-table').data('source')
    d.extra_search = $('#vendor-select').val();
    return

我的过滤字段的其他一些javascript:

$('#vendor-select.vendor-select').on('change', function() {
  $('#vendor-skus-table').DataTable().ajax.reload();
});

我的数据表文件:

class VendorSkuDatatable < AjaxDatatablesRails::Base
def_delegators :@view, :params, :link_to, :vendor_skus_path, :vendor_path

def sortable_columns
  @sortable_columns ||= ['VendorSku.name', 'Vendor.name', 'VendorSku.inventory_quantity' ]
end

def searchable_columns
  @searchable_columns ||= ['VendorSku.name', 'Vendor.name']
end

private

def data
  records.map do |record|
    [
      link_to(record.name, record),
      link_to(record.vendor.name, record.vendor),
      record.inventory_quantity
    ]
  end
end

def get_raw_records
  VendorSku.joins(:vendor).where(vendor_id: params[:extra_search])
end
end

1 个答案:

答案 0 :(得分:2)

抱歉,我的代码是JavaScript,我不知道CoffeScript。

为了向您的ajax请求添加参数,您必须在创建ajax.data时指定选项datatable

  $('#vendor-skus-table').DataTable({
    // ... your paramteres
    ajax: {
      data: function(d) {
        d.sku = $('#vendor-skus-table').data('source'); // or maybe $('#vendor-skus-table').data('source').join(',')
      }
    }

您将在后端获取ajax请求的sku参数。