Ruby on rails 如何在ActiveAdmin';是否在选项卡中显示页面?

Ruby on rails 如何在ActiveAdmin';是否在选项卡中显示页面?,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,考虑以下场景:我在ActiveAdmin中有一个带有索引和show页面的资源,在show页面上我有更多 在那些选项卡中的一些(可能不止一个)中,我希望以表格形式显示与资源相关的信息,并带有可排序的列。 我还要求应用程序在更改表的排序顺序时保持在所选的选项卡上 如何在ActiveAdmin中实现这一点?不幸的是,ActiveAdmin似乎不支持开箱即用,但它是可以实现的 在ActiveAdmin.register调用中(通常在lib/admin/resource.rb中),这将为资源的一些连接数

考虑以下场景:我在
ActiveAdmin
中有一个带有
索引
show
页面的资源,在show页面上我有更多

在那些
选项卡中的一些(可能不止一个)中,我希望以表格形式显示与资源相关的信息,并带有可排序的列。
我还要求应用程序在更改表的排序顺序时保持在所选的
选项卡上


如何在
ActiveAdmin
中实现这一点?

不幸的是,ActiveAdmin似乎不支持开箱即用,但它是可以实现的

ActiveAdmin.register
调用中(通常在
lib/admin/resource.rb
中),这将为
资源的
一些连接数据创建一个表:

tab "Tab 2" do
  table_for resource.some_connection do
    column :name
    ...
  end
end
不幸的是,这不是一个可排序的表,因此我们只需添加以下选项哈希:

{:sortable => true, :class => 'index_table'}
像这样:

table_for resource.some_connection, {:sortable => true, :class => 'index_table'} do
嗯,这几乎可以奏效。不幸的是,选择排序列会将您带回第一个
选项卡
,但排序将存储在URL中(以
任何/your/page/address/is?order=name\u asc
格式)

为了解决这个问题,我在
ActiveAdmin的
TableFor
类中添加了以下内容(在我在项目结构中创建的新文件中,例如:
ext/active\u admin/views/table\u for
):

这些更改要求我们稍微修改构建表的方式(我们必须从
参数
中检索排序设置,并将其应用于数据):

这是结果(此处表格实际放入a中,
anchor
指向该结果):


实际上,ActiveAdmin确实支持这一点

要对表进行排序,请调用
order()
方法,并传递列名和
desc/asc
,如下所示:

table_for boat.bookings.order('created_at desc') do
  column :name
  column :created_at
end

感谢Ryan Bates的屏幕广播:

我尝试了您的解决方案,首先添加了:require'ext/active\u admin/views/table\u for'在运行服务器时抛出错误,表示找不到它。在没有它的情况下运行时,它不会对我的数据进行排序,只会跳转,这确实表明它指向了右侧tab@Fay007免责声明:这是一个4年前的答案,很可能从那时起active admin中发生了很多变化,但我没有遵循这些变化,因此很可能这不是实现您想要的方式。
的文件
ext/active\u admin/views/table\u是您应该创建的文件(以monkey补丁为内容),因此如果您的服务器找不到它,那么您可能会以不同的方式命名它,或者忘记将其包含在解决方案中。我将对答案进行编辑,使其更加明确:)
monkey_patches.rb
-----------------
require 'ext/active_admin/views/table_for'
tab_name = "Tab 2"
tab tab_name do
  tab_anchor = tab_name.parameterize('_')

  data = resource.some_conection
  unless params['order'].nil?
    order = params['order'].to_s.sub(tab_anchor + '_', '').sub("_asc", " ASC").sub("_desc", " DESC")
    data = data.order(order) unless order.nil?
  end

  table_for data, { anchor: tab_anchor, :sortable => true, :class => 'index_table'} do
    column :name
    ...
  end
end
table_for boat.bookings.order('created_at desc') do
  column :name
  column :created_at
end