Ich habe eine Ajax-Datentabelle für meine SKUs. Dazu benutze ich den Ajax-Datatables-Rails-Edelstein. Das Suchen und Sortieren funktioniert einwandfrei, aber jetzt versuche ich eine Filterfunktion zu meiner Tabelle hinzuzufügen und es scheint nichts zu tun. Ich habe dieses Beispiel für die Filterfunktion verwendet: https://datatables.net/examples/api/multi_filter_select.html. In dem Beispiel sind in der Fußzeile ausgewählte Felder gezeichnet, aber für mich ist die Fußzeile leer. Wie der Code überhaupt nicht läuft. Ich bekomme auch keine Fehler.Rails Datatables Filter auswählen
Ich initialisiere meine Datentabelle in meiner coffeescrip Datei (assets/javascripts/vendor_skus.js.coffee), also musste ich sie in coffeescript übersetzen. Ich habe keine Erfahrung mit coffeescript oder Ajax mit Schienen, also bin ich irgendwie verloren, was schief läuft.
Wie ich mein Problem gelöst:
Die Standard-Auswahlboxen waren problematisch für meine Situation, wie ich für meine Tabelle AJAX bin mit und die Auswahlboxen schien nur auf Client-Seite Tabellen richtig zu arbeiten. Anstatt mit den Standardauswahlfeldern zu gehen, habe ich beschlossen, eigene benutzerdefinierte Filter zu erstellen. Diese sind regelmäßig Auswahlboxen wie so:
<%= 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 %>
Das ist mein Coffeescript zu machen jQuery die Parameter an den Server senden und laden Sie die Tabelle 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
In Ihrem Controller, stellen Sie sicher, dass das passieren Parameter wie:
respond_to do |format|
format.html
format.json { render json: OrderDatatable.new(view_context, { store_id: params[:store_id], status: params[:status] }) }
end
Und dann in Ihrer Datat-Datei, verwenden Sie die Parameter, um Ihre Ergebnisse zu filtern. In diesem Fall verwende ich eine Mehrfachauswahl für den Status. Wenn der Leerwert ausgewählt ist, wird params [: status] .present? ergibt wahr. Deshalb habe ich eine Überprüfung hinzugefügt, um festzustellen, ob das erste Element eine leere Zeichenfolge ist.
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) Sie müssen CoffeeScript nicht verwenden, wenn Sie nicht möchten, können Sie immer noch plain JavaScript verwenden. (2) Ist das der richtige Einzug in Ihrem CoffeeScript? –
Ich aktualisierte meine Gedankenstriche. Versuchte mit einfachem JavaScript und es funktionierte, aber es berücksichtigt nicht die Seitenumbruch (so waren nur die Werte von der ersten Seite im Dropdown-Menü auswählbar). Auch die Werte in der Dropdownliste waren nicht gleich den Werten in meiner Tabelle, so dass die Suche immer zu 0 Ergebnissen führte. Ich denke, ich werde in den Aufbau eines benutzerdefinierten Filters schauen – stoerebink