2016-06-10 15 views
0

У меня есть 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 
+0

(1) Вам не нужно использовать CoffeeScript, если вы этого не хотите, вы все равно можете использовать простой JavaScript. (2) Это правильный отступ в вашем CoffeeScript? –

+0

Я обновил свои отступы. Пробовал использовать простой javascript, и он работал, но он не учитывал разбиение на страницы (поэтому в раскрывающемся списке были выбраны только значения с первой страницы). Также значения в раскрывающемся списке не были равны значениям в моей таблице, поэтому поиск всегда приводил к 0 результатам. Я думаю, что я займусь созданием настраиваемого фильтра. – stoerebink

ответ

1

Я столкнулся с тем же вопросом при реализации этого. Я узнал, что этот вопрос с этой линией:

column.search((if val then '^' + val + '$' else ''), true, false).draw() 

где кофе сценарий не понравился следующий бит:

, правда, ложь

После удаления его следующим образом:

column.search(if val then '^' + val + '$' else '').draw() 

все работает нормально. Остановитесь на этом, я не являюсь участником javascript/coffeescript, поэтому какое негативное влияние оказывает результат, выходит за рамки меня. Но, как и вы, я в настоящее время борюсь за то, чтобы все результаты отображались в выбираемом фильтре выпадающего списка. Он отображает только уникальные значения с текущей страницы данных - что не помогает.

FYI, чтобы получить разбиение на страницы, перейдите в файл datatable.rb и раскомментируйте правильную строку вверху, которая относится к используемой странице. Я использую «will_paginate» для начальной загрузки, так что мое выглядит следующим образом:

include AjaxDatatablesRails::Extensions::WillPaginate 

Надежда, что помогает. Случайно, вы нашли способ показать все результаты в фильтре выбора?

+0

В результате я создал свои собственные фильтры. Я на самом деле нашел это довольно легко сделать, у меня есть сворачиваемая панель с фильтрами выше моих данных, которые теперь передают их значение в datatable и перерисовывают таблицу onchange. Работает хорошо! – stoerebink

+0

Не могли бы вы разместить пример? или, может быть, любая онлайн-документация, которая поможет кому-то сделать то же самое? – Fixnpixels

+0

Я обновляю сообщение своим решением. – stoerebink