按另一个值排序Rails DataTable列

时间:2016-06-28 11:00:45

标签: ruby-on-rails sorting datatable

我正在构建一个帮助台应用程序。我有一个名为TicketDetail的模型,其中包含一个使用数据表通过JSON获取数据的表。这是为了定期重新计算票证打开的时间。所花费的时间由一个简单的帮助器格式化,因此它的格式为" dd:hh:mm",但它应按时间(存储为十进制)乘以加权进行排序。这是数据表定义

var table = $('#ticket_details').DataTable({
 order: [[ 8, "desc" ], [ 9, "desc" ], [ 2, "asc" ]],
 stateSave: true,
 deferRender: true,
 ajax: $('#ticket_details').data('source'),
 "columns": [
 { "data": "reference_number" },
 { "data": "location" },
 { "data": "title" },
 { "data": "parent", className: "hidden-md hidden-sm hidden-xs" },
 { "data": { _:"time_display.time", sort: "time_display.decimal_time"}},
 { "data": "created_by", className: "hidden-md hidden-sm hidden-xs" }
 ]
 } ); 

setInterval( function () {
table.ajax.reload( null, false ); }, 60000 );

这是一张简化的样本记录,其中机票已开放3天6小时,权重为x2(即3.25 * 2 = 6.5:

{
 data: [
  {
   id: 140,
   parent: null,
   title: "[",
   location: "<a href="/en-GB/stores/123">Bond St</a>",
   ticket_sla: "16 Hours",
   reference_number: "<a href="/en-GB/ticket_details/140/edit">1606210001</a>",
   ticket_sla_weighting: 2,
   time_display: {
   time: "<span class = "label label-danger">03:06:00</span>",
   decimal_time: 6.5
   }
 ]
}

问题是如果我显示decimal_time,数据表会正确排序,但是只要我将格式化的时间放在类中,它就会立即按冒号左边的天数进行排序。 (因此03:06:00和03:18:00将无法正确排序)。

1 个答案:

答案 0 :(得分:1)

对于DataTable中的日期/时间排序您需要使用它的排序插件

例如, 您需要包含此js文件:

//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js
//cdn.datatables.net/plug-ins/1.10.12/sorting/datetime-moment.js

然后,在你的jQuery中使用它作为

$.fn.dataTable.moment( 'HH:mm MMM D, YY' ); // Pass your date time format as param

如需深入参考,请查看:

Sorting Plugins

Ultimate date / time sorting plugin