Javascript 如何配置datatable,使其能够根据创建日期对记录进行排序(描述)?

Javascript 如何配置datatable,使其能够根据创建日期对记录进行排序(描述)?,javascript,ruby-on-rails,sorting,date,datatable,Javascript,Ruby On Rails,Sorting,Date,Datatable,我正在使用我的rails应用程序中的datatable对用户进行索引页面。我在索引页面中的第一列是在处创建的。此列中的数据看起来像是2016年10月17日星期一的。我想让此列按照desc顺序中的此日期格式进行排序。我该怎么做? 这就是我试过的。但它没有起作用 <script type="text/javascript"> $(document).ready(function() { var index = $('#reg_req_data_table').dataTabl

我正在使用我的
rails
应用程序中的
datatable
对用户进行
索引
页面。我在
索引
页面中的第一列
是在
处创建的
。此
列中的
数据
看起来像是2016年10月17日星期一的
。我想让此列按照
desc
顺序中的此日期格式进行排序。我该怎么做?
这就是我试过的。但它没有起作用

<script type="text/javascript">
  $(document).ready(function() {
    var index = $('#reg_req_data_table').dataTable({
      "order": [[ 1, "desc" ]],
       'aoColumnDefs': [{
       'bSortable': false      
    }],
    "bLengthChange": false,
    "sDom": '<"top"pfl>rt<"bottom"i><"clear">'
      });
  });
</script>

$(文档).ready(函数(){
var索引=$('#reg_req_data_table')。数据表({
“订单”:[[1,“说明”],
“aoColumnDefs”:[{
“bSortable”:false
}],
“bLengthChange”:false,
“sDom”:“rt”
});
});

这个答案将向您展示如何遵循Rails惯例并在ruby类中处理排序,然后再作为json返回到DataTables。此外,如果您处理的记录超过数百条,强烈建议您使用服务器端处理,这比客户端处理快得多(此示例将显示服务器端):

您的用户索引操作应该是:

def index
  respond_to do |format|
    format.html
    format.json { render json: UsersDatatable.new(view_context) }
  end
end
<div class='table-responsive'>
  <table id='reg_req_data_table' data-source="<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>">
  <thead>
    <tr>
       <th>Created On:</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $('#reg_req_data_table').DataTable({
       "serverSide": true,
       "ajax": {url: '<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>', type: "POST"},
       "processing": true
    }),
  });
</script>
您应该在应用程序文件夹中创建名为datatables的子文件夹,然后将此.rb文件添加到其中:

#app/datatables/users_datatable.rb   Notice it's called users_datatable! Rails will infer the proper class lookup path because of this.
class UsersDatatable
  delegate :params, :h, :link_to, to: :@view

  def initialize(view)
    @view = view
  end

  def as_json(options = {})
    {
      sEcho: params[:sEcho].to_i,
      iTotalRecords: User.count,
      iTotalDisplayRecords: users.total_entries,
      aaData: data
    }
  end

private

  def data
    users.map do |user|
      [
        user.created_at.strftime("%d-%b-%y")
      ]
    end
  end

  def users
    @users ||= fetch_users
  end

  def fetch_users
    users = User.all.order("created_at DESC")
    users = users.page(page).per_page(per_page)
    if params[:search].present? && params[:search]["value"].present?
      users = users.where("email like :search", search: "#{params[:search]["value"]}%")
    users
  end

  def page
    params[:start].to_i/per_page + 1
  end

  def per_page
    params[:length].to_i > 0 ? params[:length].to_i : 10
  end

  def sort_column
    columns = %w[created_at ]
    columns[params[:order]["0"]["column"].to_i]
  end

  def sort_direction
    params[:order]["0"]["dir"] == "desc" ? "desc" : "asc"
  end
end
现在,相应的用户视图
index.html.erb
应该是:

def index
  respond_to do |format|
    format.html
    format.json { render json: UsersDatatable.new(view_context) }
  end
end
<div class='table-responsive'>
  <table id='reg_req_data_table' data-source="<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>">
  <thead>
    <tr>
       <th>Created On:</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $('#reg_req_data_table').DataTable({
       "serverSide": true,
       "ajax": {url: '<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>', type: "POST"},
       "processing": true
    }),
  });
</script>

创建日期:
$(文档).ready(函数(){
$('reg#req_data_table')。数据表({
“服务器端”:正确,
“ajax”:{url:'',键入:“POST”},
“处理”:正确
}),
});

请注意,表体标记中没有任何内容。服务器端处理设置datatables通过json接受该信息,json就是我们在UsersDatatable类中发送的信息。

这个答案将向您展示如何遵循Rails约定并在ruby类中处理排序,然后再作为json发送回datatables。此外,如果您处理的记录超过数百条,强烈建议您使用服务器端处理,这比客户端处理快得多(此示例将显示服务器端):

您的用户索引操作应该是:

def index
  respond_to do |format|
    format.html
    format.json { render json: UsersDatatable.new(view_context) }
  end
end
<div class='table-responsive'>
  <table id='reg_req_data_table' data-source="<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>">
  <thead>
    <tr>
       <th>Created On:</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $('#reg_req_data_table').DataTable({
       "serverSide": true,
       "ajax": {url: '<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>', type: "POST"},
       "processing": true
    }),
  });
</script>
您应该在应用程序文件夹中创建名为datatables的子文件夹,然后将此.rb文件添加到其中:

#app/datatables/users_datatable.rb   Notice it's called users_datatable! Rails will infer the proper class lookup path because of this.
class UsersDatatable
  delegate :params, :h, :link_to, to: :@view

  def initialize(view)
    @view = view
  end

  def as_json(options = {})
    {
      sEcho: params[:sEcho].to_i,
      iTotalRecords: User.count,
      iTotalDisplayRecords: users.total_entries,
      aaData: data
    }
  end

private

  def data
    users.map do |user|
      [
        user.created_at.strftime("%d-%b-%y")
      ]
    end
  end

  def users
    @users ||= fetch_users
  end

  def fetch_users
    users = User.all.order("created_at DESC")
    users = users.page(page).per_page(per_page)
    if params[:search].present? && params[:search]["value"].present?
      users = users.where("email like :search", search: "#{params[:search]["value"]}%")
    users
  end

  def page
    params[:start].to_i/per_page + 1
  end

  def per_page
    params[:length].to_i > 0 ? params[:length].to_i : 10
  end

  def sort_column
    columns = %w[created_at ]
    columns[params[:order]["0"]["column"].to_i]
  end

  def sort_direction
    params[:order]["0"]["dir"] == "desc" ? "desc" : "asc"
  end
end
现在,相应的用户视图
index.html.erb
应该是:

def index
  respond_to do |format|
    format.html
    format.json { render json: UsersDatatable.new(view_context) }
  end
end
<div class='table-responsive'>
  <table id='reg_req_data_table' data-source="<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>">
  <thead>
    <tr>
       <th>Created On:</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $('#reg_req_data_table').DataTable({
       "serverSide": true,
       "ajax": {url: '<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>', type: "POST"},
       "processing": true
    }),
  });
</script>

创建日期:
$(文档).ready(函数(){
$('reg#req_data_table')。数据表({
“服务器端”:正确,
“ajax”:{url:'',键入:“POST”},
“处理”:正确
}),
});

请注意,表体标记中没有任何内容。服务器端处理设置datatables通过json接受该信息,json是我们在UsersDataable类中发送的信息。

我将使用Bates的railscast并按照他的方法创建一个单独的类来处理逻辑。它遵循Rails惯例,允许您在ruby中处理大多数操作,如排序。如果您想要完整的写操作,我将向您展示如何用“Rails”的方式来完成。如果你还没有解决,就告诉我。不,还没有解决。请在rails方面帮助我,我将使用Bates的railscast并按照他的方法创建一个单独的类来处理逻辑。它遵循Rails惯例,允许您在ruby中处理大多数操作,如排序。如果您想要完整的写操作,我将向您展示如何用“Rails”的方式来完成。如果你还没有解决,就告诉我。不,还没有解决。请帮我一把