Bas*_*ard 7 ruby ruby-on-rails activeadmin
Active Admin似乎不支持多列排序(即将多个值传递给该config.sortable选项).我在这里看到了一个老猴子补丁,但它似乎不适用于我的版本(来自Github的1.0.0.pre).
有没有办法在最新的Active Admin版本上获得多个可排序的列?
nis*_*van 15
这也是一个猴子补丁:
在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
Run Code Online (Sandbox Code Playgroud)
重启服务器.现在您可以使用separeted的多个列名称"_and_".例如:
config.sort_order = 'first_name_desc_and_last_name_asc'
Run Code Online (Sandbox Code Playgroud)
对于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
Run Code Online (Sandbox Code Playgroud)
对于我的情况,我会使用它,因为它对我来说更自然:
config.sort_order = 'first_name_desc, last_name_asc'
Run Code Online (Sandbox Code Playgroud)
细节来自我的要点https://gist.github.com/anhkind/5e9d849ebe4f3a452e31
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |