2013-11-27 3 views
0

Когда я отсортировать name столбец модели в ActiveAdmin, я получаю выход, такие как:Как игнорировать регистр при сортировке столбца

  • Яблоки
  • Сосульки
  • зебры
  • IMACS
  • айфонов

где буквы верхнего и нижнего регистра сортируются отдельно. Я предпочитаю, чтобы отобразить упорядоченные столбцы следующим образом:

  • Яблоки
  • Сосульки
  • IMACS
  • айфонов
  • зебры

, без неестественной чувствительности к регистру. Я попытался с помощью линии

column :name, sortable: 'my_model.name.downcase' 

смягчить проблему, но это бросает ActiveRecord::StatementInvalid ошибку. Как я могу заставить это работать?

+0

Каков фактический выход ошибки? Вы пробовали 'sortable: 'LOWER (my_models_table_name.name)''? –

+0

Попробуйте 'my_model.name.to_s.downcase' – fatfrog

ответ

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' 

Это также будет работать, если вызов метода колонки с блоком.

Очевидно, что если у вас есть столбец, который вы хотите сделать, так как это называется «lower_anything», вам может потребоваться настроить.

+1

Этот ответ сработал для меня. (Спасибо.) В ответе выше я заменил lower_ на lower__ (double underline). Это устраняет невозможность сортировки по столбцам, имена которых начинаются с «lower_». –

Смежные вопросы