排序列时如何忽略大小写

当我在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”的列做这个,你可能需要进行调整。