[英]Sortable table columns based on hash & key array
I would like to create sortable columns for my table which tabulates data based on hashes. 我想为我的表创建可排序的列,该列基于哈希将数据制成表格。 By following http://railscasts.com/episodes/228-sortable-table-columns?view=asciicast .
通过遵循http://railscasts.com/episodes/228-sortable-table-columns?view=asciicast 。 From what I understand, order method would only work sorting out a Model.
据我了解, 订购方法只能对模型进行分类。 What's the best way of sorting out columns for such tables.
整理此类表中的列的最佳方法是什么。 I have 29 similar tables as mentioned.
我有29个类似的表格。 My codes are as below :-
我的代码如下:
admins_controller.rb 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
Results of the above the above query would look like this :- 以上查询的结果如下:
array = [["3M", 4], ["A.P. Møller-Mærsk Group", 10], ["ABB", 14], ["Abbott Laboratories", 12]]
On views :- 在意见:-
admins.html.erb 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>
You could go for a JavaScript / jQuery solution like http://tablesorter.com/docs/ 您可以使用JavaScript / jQuery解决方案,例如http://tablesorter.com/docs/
This would allow for sorting in frontend and you would not need to adjust the backend. 这将允许在前端进行排序,而您无需调整后端。
If you want to have a backend solution, you could go for sorting by column index. 如果您想要一个后端解决方案,则可以按列索引进行排序。 A simple solution would be something like this:
一个简单的解决方案是这样的:
Controller: 控制器:
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
View: 视图:
<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>
For reverting sort order, you would need to also pass a direction state and probably reverse order. 要还原排序顺序,您还需要传递方向状态,可能还需要传递逆序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.