活动管理员:对多列进行排序
Active Admin似乎还不支持多列排序(即将多个值传递给config.sortable
选项)。 我在这里看到了一个老猴子补丁,但它似乎不适用于我的版本(来自Github的1.0.0.pre)。
有没有办法在最新的Active Admin版本上获得多个可排序列?
这也是一个猴子补丁:
在config / initializers或lib文件夹中创建一个新文件: multiple_columns_sorting.rb
module ActiveAdmin class ResourceController < BaseController module DataAccess def apply_sorting(chain) params[:order] ||= active_admin_config.sort_order orders = [] params[:order].split('_and_').each do |fragment| order_clause = OrderClause.new fragment if order_clause.valid? orders << order_clause.to_sql(active_admin_config) end end if orders.empty? chain else chain.reorder(orders.shift).order(orders) end end end end end
重启服务器。 现在您可以使用由"_and_"
多个列名称。 例如:
config.sort_order = 'first_name_desc_and_last_name_asc'
对于ActiveAdmin v0.6.0,我将猴子补丁调整为类似的东西
# initializers/active_admin.rb module ActiveAdmin class ResourceController module DataAccess def apply_sorting(chain) params[:order] ||= active_admin_config.sort_order orders = [] params[:order].present? && params[:order].split(/\s*,\s*/).each do |fragment| fragment =~ /^([\w\_\.]+)_(desc|asc)$/ column = $1 order = $2 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(".") orders << "#{table_column} #{order}" end if orders.empty? chain else chain.reorder(orders.shift).order(orders) end end end end end
对于我的情况,我会使用它,因为它对我来说更自然:
config.sort_order = 'first_name_desc, last_name_asc'
细节来自我的要点https://gist.github.com/anhkind/5e9d849ebe4f3a452e31
好吧,如果你想要更新它只有1或2个字段,那么你可以这样做。 在您的Active Admin Controller中,只需使用此方法即可。 当您传递full_name进行排序时,此方法将使用first_name和last_name列进行排序。
def apply_sorting(chain) params[:order] ||= active_admin_config.sort_order order_clause = ActiveAdmin::OrderClause.new params[:order] if order_clause.field == 'full_name' chain.reorder("(first_name, last_name) #{order_clause.order}") else super end end
你可以添加这样的东西
ActiveAdmin.register Model do controller do def scoped_collection Model.order('field_1 DESC, field2 ASC') end end config.sort_order = '' end
- 使用Active Admin过滤前跳过
- 无法使用skip_before_filter在Rails中使用ActiveAdmin
- rails activeadmin下拉菜单新建和编辑表格
- 如何在ActiveAdmin视图中使用控制器中定义的实例变量?
- NoMethodError未定义的方法`link_to_function’
- Active Admin -refresh第二次下拉基于第一次下拉选择(Rails 3.2)
- Active Admin身份validation与用户身份validation冲突
- ActiveAdmin – 未初始化的常量AdminUser
- Active Admin Gem – Rails 3.2.3,Heroku错误日志