编辑:如果可能的话,我更愿意使用bootstrap来实现此功能,因为我的项目中有引导程序。好像我可能只是错过了在rails项目中使用bootstrap的javascript的东西。
单击列名称时,表格应按该列名称对数据进行排序。以下是表格:
我尝试使用bootstrap对数据进行排序,遵循显示at this website的示例,但它并不适用于我。我错过了什么?
我的Gemfile中的相关宝石:
#Gemfile
gem 'bootstrap-sass'
gem 'autoprefixer-rails'
CSS:
#app/assets/stylesheets/application.css.scss
@import "bootstrap-sprockets";
@import "bootstrap";
/*
*= require_tree .
*= require_self
*/
使用Javascript:
#app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require_tree .
查看显示记录:
#app/views/index.html.erb
<h4>Listing Users</h4>
<table class=" table table-striped" data-sort-name="name" data-sort-order="desc">
<thead>
<tr>
<th data-field="name" data-sortable="true">Name</th>
<th data-field="age" data-sortable="true">Age</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.name %></td>
<td><%= user.age %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New User', new_user_path %>
答案 0 :(得分:9)
感谢Hunter Stevens的大量反馈。我找到的最佳选择是使用sorttable.js
。我使用的流程如下:
'jquery-turbolinks'
添加到Gemfile
以修复turbolink javascript问题和bundle install
将jquery.turbolinks
添加到javascript清单文件中:
#app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require bootstrap-sprockets
//= require turbolinks
//= require_tree .
在js
创建app/assets/javascripts/shared/<whatever_you_want_to_call_it>.js
文件。如图所示使用$(document).ready
来修复turbo链接问题。指定IIFE(可选),然后将供应商代码粘贴到IIFE中:
$(document).ready(function(){
(function vendorTableSorter(){
/* paste all the vendor code here */
}());
});// end document.ready
然后,只需将类sortable
添加到您的表中,即可对所有列进行排序:
<table class=" table table-striped sortable">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.name %></td>
<td><%= user.age %></td>
</tr>
<% end %>
</tbody>
答案 1 :(得分:7)
警告:如果您打算使用分页,则此方法无效。
更快的方式(接受零查询)涉及库sortTable.js
。该网站很好地解释了如何设置HTML文档。 (只需在列标题中添加一些类。)您还可以启用不区分大小写的排序。
假设您使用的是Rails 4,或者拥有turbolinks gem,我强烈建议您<{3}}在您的类型环境中设置sortTable.js
后强烈推荐。 (可以在detailed gist with instructions找到完整的讨论。)
警告:此方法要求每个页面视图至少有一个查询。
此方法来自Q&A on using turbolinks with sorttable.js。阅读附加代码几乎就是您所需要的。这个方法 使用分页。
如果您选择关注Railscast 228: Sortable Table Columns,请在 Ajax部分之前停止,因为不推荐使用相关的Javascript。其次,请注意该截屏视频中可能的SQL注入。值得庆幸的是,它解释了如何避免它。
答案 2 :(得分:5)
使用 bootstrap-sass &amp; bootstrap-table-rails 宝石:
<强> Gemfile
强>:
gem 'bootstrap-sass'
gem 'autoprefixer-rails' # i'm not sure whether this is relevant
gem 'bootstrap-table-rails'
更新 Gemfile 后,请不要忘记运行bundle
。
<强> app/assets/javascripts/application.js
强>:
//= require bootstrap-sprockets
//= require bootstrap-table
// # Replace below with desired locale if needed
//= require locale/bootstrap-table-ru-RU
<强> app/assets/stylesheets/application.scss
强>:
@import "bootstrap-sprockets";
@import "bootstrap";
@import "bootstrap-table";
<强> app/views/index.html.erb
强>:
<table data-toggle="table">
<thead>
<tr>
<th data-sortable="true">Name</th>
<th data-sortable="true">Age</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.name %></td>
<td><%= user.age %></td>
</tr>
<% end %>
</tbody>
</table>
仅供参考,我的宝石版本:
bootstrap-sass-3.3.5.1
bootstrap-table-rails-1.8.2.1
答案 3 :(得分:0)
试试这个:
<table class=" table table-striped" data-sort-name="name" data-sort-order="desc">
<thead>
<tr>
<th data-field="name" data-sortable="true">Name</th>
<th data-field="age" data-sortable="true">Age</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.name %></td>
<td><%= user.age %></td>
</tr>
<% end %>
</tbody>
</table>
答案 4 :(得分:0)
<table data-toggle="table">
。<th data-sortable="true">
。如果您不想对任何特定列进行排序,请将此属性设为false <th data-sortable="false">