2017-07-07 6 views
2

Ich habe eine grundlegende Datatables, die ich mit will_paginate verwenden.Datatables Ajax nach Methode sortieren

<table id="users" class="display" data-source="<%= url_for(:controller => "/account", :action => :paginate, :format => :json) %>"> 
    <thead> 
    <tr> 
     <th>First Name</th> 
     <th>Last Name</th> 
     <th>Email</th> 
     <th>Role</th> 
    </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

Die jQuery ist

<script type="text/javascript"> 
    jQuery(function() { 
     return $('#users').DataTable({ 
     processing: true, 
     serverSide: true, 
     ajax: $('#users').data('source'), 
     columns : [ 
      { data: "first_name" }, 
      { data: "last_name" }, 
      { data: "username" }, 
      { data: "role" } 
     ] 
     }); 
    }); 
</script> 

Während alles meist wunderbar arbeiten, einschließlich der Spalte suchen, meine Rolle Spalte jedoch nicht.

Während alles andere Attribute sind, die ich mit SQL abfrage, ist Rolle ein Methodenaufruf.

def role 
    return "admin" if self.admin? 
    return "manager" if self.manager? 
    return "user" 
end 

Dies wiederum funktioniert nicht mit Spaltensortierung.

Mit diesem gesagt gibt es eine Möglichkeit, Will_paginate und Databases mit Ajax zu verwenden, um eine benutzerdefinierte Sortierung mit der Methodenausgabe zu verwenden? Ich versuchte mit data-order auf der Säule, aber das scheint nicht zu sein.

Antwort

0

Ich verwendete Will-paginate für, aber ich hörte auf, es zu verwenden. Versuchen Sie, datatables nur ohne Seitennummerierung zu verwenden, da es eine Seitennummerierung enthält. Hier

ist das Codebeispiel

<script type="text/javascript">  
     // DO NOT REMOVE : GLOBAL FUNCTIONS! 
     $(document).ready(function() { 
       var responsiveHelper_dt_basic = undefined; 
       var responsiveHelper_dt_basic2 = undefined; 
       var breakpointDefinition = { 
        tablet : 1024, 
        phone : 480 
       }; 
       $('#users_table').dataTable({ 
        "sDom": "<'dt-toolbar'<'col-xs-12 col-sm-6'f><'col-sm-6 col-xs-12 hidden-xs'l>r>"+ 
         "t"+ 
         "<'dt-toolbar-footer'<'col-sm-6 col-xs-12 hidden-xs'i><'col-xs-12 col-sm-6'p>>", 
        "autoWidth" : true, 
        "preDrawCallback" : function() { 
         // Initialize the responsive datatables helper once. 
         if (!responsiveHelper_dt_basic) { 
          responsiveHelper_dt_basic = new ResponsiveDatatablesHelper($('#users_table'), breakpointDefinition); 
         } 
        }, 
        "rowCallback" : function(nRow) { 
         responsiveHelper_dt_basic.createExpandIcon(nRow); 
        }, 
        "drawCallback" : function(oSettings) { 
         responsiveHelper_dt_basic.respond(); 
        }, 
        "iDisplayLength": 50 
       });      
     }) 
</script> 
+0

Ohne Server-Seite Paginierung, Datentabelle mit Datensätzen von mehr als 1000 ist unglaublich langsam aber ... –

+0

Es gibt verschiedene Methoden, um die Reaktionszeit zu verringern, wie in Batch finden oder machen Ansicht mit den Daten und Berechnungen, die Sie anzeigen müssen. Bitte lesen Sie diesen Artikel über Datenbankansichten in Schienen https://melsatar.blog/2017/05/27/database-views-for-rails-performance-optimization/ –

+0

Das Problem ist nicht Server-Seite, Databases ist extrem speicherintensive Client Seite. Ich kann 10.000 Datensätze in weniger als 2 Sekunden generieren, aber es dauert mehr als 30 Sekunden, bis der Client die Datenelemente darauf anbringt. –

Verwandte Themen