ActiveAdmin 批处理操作表单,输入来自多个 类 的条目

ActiveAdmin batch action form with entries from multiple classes as input

根据 activeadmin 的 batch actions guide,可以创建不同类型的表单。我想要的是,该表单具有不同模型的条目 classes.

我有三个 class:ShopRecordingShopDistributionChain。一个 DistributionChain 可以有一个或多个 ShopRecordingShop,但也可以有 none 个。

Scores 索引 table 上,我想显示导出批处理操作并识别表单条目属于哪个 class(ShopRecordingShopDistributionChain)

是否可以这样做:

ActiveAdmin.register Score, as: 'Delivery' do
  ...
  batch_action :export, form: {shops: (DistributionChain.all + Shop.not_distribution_chain).collect{ |e| [e.name, e.id, e.class.name]} } do |ids, inputs|
    ...
  end
  ...
end

以便 class 成为嵌套数组中的第三个参数,位于元素名称和 ID 之后,并将其包含在 inputs 变量中?

已解决。我找到了一种通过在管理资源代码本身中声明变量的方法。

ActiveAdmin.register Score, as: 'Delivery' do
  ...
  EXPORT_INPUTS = DistributionChain.all + Shop.not_distribution_chain
  EXPORT_INPUTS_DATA = EXPORT_INPUTS.collect.with_index{ |e, i| [e.name, i] }
  ...
  batch_action :export, form: {shops: EXPORT_INPUTS_DATA } do |ids, inputs|
    element = EXPORT_INPUTS[inputs['shops'].to_i]
    ...
  end
  ...
end

EXPORT_INPUTS 包含来自多个 classes 的实际元素集。

EXPORT_INPUTS_DATA 是要在表单中使用的变量(数组),具有数组中元素的名称和索引。稍后可以检索所选索引,因为 inputs['shops']EXPORT_INPUTS[inputs['shops'].to_i] 与我们想​​要的元素完全对应。

注意: EXPORT_INPUTS_DATA 应该定义在动作之外。如果你写

batch_action :export, form: {shops: EXPORT_INPUTS.collect.with_index{ |e, i| [e.name, i] } }

直接,inputs['shops']只会等于其各自class中元素的id,这并没有告诉我们任何东西。