数据表ajax按方法排序

时间:2017-07-07 15:23:58

标签: jquery ruby-on-rails ajax datatables will-paginate

我有一个与will_paginate一起使用的基本数据表。

<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>

jQuery是

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

虽然一切都非常有效,包括列搜索,但我的角色列却没有。

虽然其他一切都是我使用SQL查询的属性,但role是一个方法调用。

data-order

这反过来不适用于列排序。

话虽如此,有没有办法使用带有ajax的will_paginate和datatables来使用方法输出的自定义排序?我尝试在列上使用BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2)) tdm_a.bigram = TermDocumentMatrix(docs_a, control = list(tokenize = BigramTokenizer)) ,但似乎并非如此。

1 个答案:

答案 0 :(得分:0)

我正在使用will-paginate但我停止使用它。尝试仅在没有分页的情况下使用datatables,因为它内部有分页。

以下是代码示例

<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>