用户形象图片

sortable column headers: 表格数据排序插件

SCH(sortable column headers)是cnady写的一个让表格化数据可以按照表头进行自动排序的插件,并且具有记忆功能,如果目前是顺序排列,咋点击同一排序链接后就会变为逆序,并且在下次排序时仍会保持不变。

SCH的使用很简单,首先,在你的controller中增加需要排序的列:

add_to_sortable_columns('listing', Book, 'author_id', 'author')

“listing”是你的这个排序方案的名称(solution name),Book是你要进行排序的model,后面的两个参数只是为了美观,也就是将URI中的”?sort=author_id”变为”?sort=author”,如果不需要,可以简单写成:

add_to_sortable_columns('listing', Book)

然后,你需要使用”sort_param”来为你的排序链接设置参数:

<%= link_to 'Author', sort_param('listing', 'author') %>

这将会产生一个”?sortasc=author”形式的链接。接着你需要使用”sortable_order”方法来对结果进行排序:

@books = Book.find :all, :order => sortable_order('listing',Book,'id')

默认将使用Book的”id”字段来进行排序,根据点击链接的不同,”sortable_order”可能会生成”books.author_id DESC”或者”books.title ASC”。SCH事实上使用了一个session来保存排序信息,上一次的排序信息保存在”sessions[:sortable_column_headers]”中。

SCH的SVN地址是: https://svn.elctech.com/svn/public/sortable_column_headers/

作者同时还提供了一个Demo: https://svn.elctech.com/svn/public/demo/sortable_column_headers/

不过Mysql不支持按照拼音对UTF8的中文进行排序,上面的数据是按照GB2312存储的。从jenni的blog上看到通过Rails实现Mysql中UTF8中文按拼音排序的方法,需要使用iconv库:

conv = Iconv.new("GB2312", "utf-8")
@test1 = Province.find(:all).sort {|x, y|
  conv.iconv(x.prov_name) <=> conv.iconv(y.prov_name)
}

详细介绍可以参看:http://blog.donews.com/jenniferweng/archive/2006/08/07/991039.aspx

Demo运行截图:

点击title后变为:

回到帖子顶部