繁体   English   中英

基于哈希和键数组的可排序表列

[英]Sortable table columns based on hash & key array

我想为我的表创建可排序的列,该列基于哈希将数据制成表格。 通过遵循http://railscasts.com/episodes/228-sortable-table-columns?view=asciicast 据我了解, 订购方法只能对模型进行分类。 整理此类表中的列的最佳方法是什么。 我有29个类似的表格。 我的代码如下:

admins_controller.rb

   class AdminsController < ApplicationController

     array =[]
     User.each do |user|
        company_name = Company.find(user.company_id).name
        array.push(company_name)
     end
     company = array.inject(Hash.new(0)) { |h, e| h[e] += 1 ; h }
   end

以上查询的结果如下:

 array = [["3M", 4], ["A.P. Møller-Mærsk Group", 10], ["ABB", 14], ["Abbott Laboratories", 12]]

在意见:-

admins.html.erb

    <table class="table">
    <tr>
      <th><%= link_to "Company", remote: true, :sort => "hash" %></th>
      <th><%= link_to "Value", remote: true, :sort => "key" %></th>
      <th><%= link_to "Percentage", remote: true, :sort => "Percentage"  %></th>
    </tr>
    <% if @mentors.try(:any?) %>
        <% @mentors.each do |key, value| %>
          <tr>
            <td><%= key %></td>
            <td><%= value  %> </td>
            <td><%= ((value.to_f/@total_co.to_f).to_f * 100 ).round(2)%> </td>
          </tr>
        <% end %>
    <% else %>
        <td> nil </td>
        <td> nil </td>
        <td> nil </td>
    <% end %> 
    </table>

您可以使用JavaScript / jQuery解决方案,例如http://tablesorter.com/docs/

这将允许在前端进行排序,而您无需调整后端。

如果您想要一个后端解决方案,则可以按列索引进行排序。 一个简单的解决方案是这样的:

控制器:

class AdminsController < ApplicationController
  def index
    array =[]
    User.each do |user|
      company_name = Company.find(user.company_id).name
      array.push(company_name)
    end

    company = array.inject(Hash.new(0)) { |h, e| h[e] += 1 ; h }

    sort_column = params.fetch(:sort, 0).to_i
    company.sort! { |a, b| a[sort_column] <=> b[sort_column] }
  end
end

视图:

<table class="table">
  <tr>
    <th><%= link_to "Company", remote: true, :sort => 0 %></th>
    <th><%= link_to "Value", remote: true, :sort => 1 %></th>
    <th><%= link_to "Percentage", remote: true, :sort => 1  %></th>
  </tr>
  <% if @mentors.try(:any?) %>
  <% @mentors.each do |key, value| %>
  <tr>
    <td><%= key %></td>
    <td><%= value  %> </td>
    <td><%= ((value.to_f/@total_co.to_f).to_f * 100 ).round(2)%> </td>
  </tr>
  <% end %>
  <% else %>
  <td> nil </td>
  <td> nil </td>
  <td> nil </td>
  <% end %>
</table>

要还原排序顺序,您还需要传递方向状态,可能还需要传递逆序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM