如何在ActiveAdmin的仪表板中对列进行排序?

问题描述 投票:0回答:2

我一直在用表填充仪表板页面,而没有呈现任何html。但是我需要根据数据库中具有布尔值的列值对表进行排序或过滤。 sortable标签没有任何反应

tab "test" do
        columns  do
          panel "test" do

            table_for Test.all do

              column "Name", :name

              column "status", :status, :sortable => :status  # this needs to be sortable


            end
          end
        end
      end

ActiveAdmin Dasboard中可能吗?

ActiveAdmin.register_page "Dashboard" do
ruby-on-rails activerecord activeadmin
2个回答
0
投票

如果将来有人需要帮助以自定义排序:

test_order = if params[:order]
              params[:order].gsub(/[^a-z_]/,'').gsub(/_(asc|desc)$/, ' \1') #sanitize and convert to order expression
            else
              "status desc" #default
            end

table_for Test.all.order(test_order), sortable: true, class: 'index_table'  do

              column "Name", :name, sortable: false #to hide sorting name

              column :status
            end
          end
        end

来源:https://github.com/activeadmin/activeadmin/issues/4483#issuecomment-237073696


0
投票

ActiveAdmins table_for包装器假定您正在处理资源。在“仪表板”页面上并非如此。通过动态打开ActiveAdmin::Page(将此文件放在admin/dashboard.rb顶部)

 module ActiveAdmin
      class Page
        def ordering
          ""
        end
        def resource_column_names
          []
        end
        def resource_quoted_column_name q
          q
        end
      end
    end
  end

您可以通过以下方式使用table_for

  panel "test" do
    resources_to_sort_over = Test.unscoped
    order = params[:order] if params[:order] =~ /_(desc|asc)/
    order = order || 'id_desc' # defaults to id
    aa_order_clause = ActiveAdmin.application.order_clause.new(active_admin_config, order)
    sorted_resources = aa_order_clause.apply(resources_to_sort_over)

    table_for(sorted_resources, :sortable => true, :class => 'index_table', :id => 'your_id') do
      column :name
      column :status
    end
  end

不过要当心。有些人可能将其称为monkey patching。想要在这里工作。

© www.soinside.com 2019 - 2024. All rights reserved.