У меня есть ajax datatable для моих SKU. Для этого я использую жемчужину ajax-datatables-rails. Искажение и сортировка работают отлично, но теперь я пытаюсь добавить функцию фильтрации в свою таблицу, и она, похоже, ничего не делает. Я использовал этот пример для функции фильтра: https://datatables.net/examples/api/multi_filter_select.html. В этом примере в нижнем колонтитуле выделены флажки, но для меня нижний колонтитул пуст. Как и код не запускается вообще. У меня также нет ошибок.Rails datatables select filter
Я инициализирую свой datatable в своем файле coffeescrip (assets/javascripts/vendor_skus.js.coffee), поэтому мне пришлось перевести его в coffeescript. Я не имею опыта работы с coffeescript или использованием ajax с рельсами, поэтому я немного потерял то, что происходит не так.
Как решить мою проблему:
Стандартные выберите коробки были проблематичными для моей ситуации, как я использую AJAX для моего стола и выберите коробки, казалось, только работать должным образом на стороне клиента таблиц. Вместо того, чтобы идти со стандартными блоками выбора, я решил создать свои собственные фильтры. Это обычные выберите коробки так:
<%= select_tag "store-id", options_from_collection_for_select(@stores, "id", "name"), include_blank: true, class:"store-id form-control" %>
<%= select_tag "status", options_for_select([ "Open", "On Hold", "Cancelled", "Closed", "Error" ]), include_blank: true, class:"form-control", multiple:true %>
Это мой CoffeeScript сделать JQuery представить параметры сервера и перезагрузить таблицу OnChange:
$ ->
$('#orders-table').DataTable
processing: true
serverSide: true
retrieve: true
pageLength: 50
title: 'orders'
lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]]
ajax: data: (d) ->
d.store_id = $('#store-id').val();
d.status = $('#status').val();
return
$ ->
$('#store-id').on 'change', ->
$('#orders-table').DataTable().ajax.reload()
return
$ ->
$('#status').on 'change', ->
$('#orders-table').DataTable().ajax.reload()
return
В контроллере, убедитесь, передать параметры наряду с DataTables как так:
respond_to do |format|
format.html
format.json { render json: OrderDatatable.new(view_context, { store_id: params[:store_id], status: params[:status] }) }
end
И тогда в вашем DataTable файле, используйте параметры для фильтрации результатов. В этом случае я использую multi select for status, поэтому, когда выбрано пустое значение, params [: status] .present? приводит к истине. Вот почему я добавил чек, чтобы увидеть, является ли первый элемент пустой строкой.
def get_raw_records
# insert query here
query = Order.all
query = query.status(params[:status]) if params[:status].present? && (params[:status].count == 1 && params[:status][0] == "") == false
query = query.store(params[:store_id]) if params[:store_id].present?
query.joins(:store)
end
(1) Вам не нужно использовать CoffeeScript, если вы этого не хотите, вы все равно можете использовать простой JavaScript. (2) Это правильный отступ в вашем CoffeeScript? –
Я обновил свои отступы. Пробовал использовать простой javascript, и он работал, но он не учитывал разбиение на страницы (поэтому в раскрывающемся списке были выбраны только значения с первой страницы). Также значения в раскрывающемся списке не были равны значениям в моей таблице, поэтому поиск всегда приводил к 0 результатам. Я думаю, что я займусь созданием настраиваемого фильтра. – stoerebink