排序列时如何忽略大小写
当我在ActiveAdmin
中对模型的name
列进行排序时,我得到如下输出:
- 苹果
- 冰柱
- 斑马
- iMac电脑
- iPhone手机
其中大写和小写字母似乎单独排序。 我更喜欢以下列方式显示已排序的列:
- 苹果
- 冰柱
- iMac电脑
- iPhone手机
- 斑马
没有不自然的区分大小写。 我试过使用这条线
column :name, sortable: 'my_model.name.downcase'
缓解此问题,但这会引发ActiveRecord::StatementInvalid
错误。 我怎样才能让它发挥作用?
如果你把它放在active_admin.rb中:
module ActiveAdmin class ResourceController < BaseController module DataAccess def apply_sorting(chain) params[:order] ||= active_admin_config.sort_order if params[:order] && params[:order] =~ /^(lower_)?([\w\_\.]+)_(desc|asc)$/ icase = params[:order].to_s.starts_with?('lower_') column = $2 order = $3 table = active_admin_config.resource_column_names.include?(column) ? active_admin_config.resource_table_name : nil table_column = (column =~ /\./) ? column : [table,active_admin_config.resource_quoted_column_name(column)].compact.join(".") chain.reorder("#{'lower' if icase}(#{table_column}) #{order}") else chain # just return the chain end end end end end
然后你可以这样做:
column :name, sortable: 'lower_name'
如果使用块调用column方法,这也将起作用。
显然,如果你碰巧有一个你希望用名为“lower_anything”的列做这个,你可能需要进行调整。