当我在name
中对模型的ActiveAdmin
列进行排序时,会得到如下输出:
其中大写和小写字母似乎单独排序。我更喜欢以下列方式显示已排序的列:
没有不自然的区分大小写。我尝试使用
行column :name, sortable: 'my_model.name.downcase'
缓解此问题,但这会引发ActiveRecord::StatementInvalid
错误。我怎样才能让它发挥作用?
答案 0 :(得分:1)
如果你把它放在你的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”的列做这个,你可能需要进行调整。