ActiveAdmin 批处理操作表单,输入来自多个 类 的条目
ActiveAdmin batch action form with entries from multiple classes as input
根据 activeadmin 的 batch actions guide,可以创建不同类型的表单。我想要的是,该表单具有不同模型的条目 classes.
我有三个 class:Shop
、RecordingShop
和 DistributionChain
。一个 DistributionChain
可以有一个或多个 Shop
或 RecordingShop
,但也可以有 none 个。
在 Scores
索引 table 上,我想显示导出批处理操作并识别表单条目属于哪个 class(Shop
、RecordingShop
或 DistributionChain
)
是否可以这样做:
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,这并没有告诉我们任何东西。
根据 activeadmin 的 batch actions guide,可以创建不同类型的表单。我想要的是,该表单具有不同模型的条目 classes.
我有三个 class:Shop
、RecordingShop
和 DistributionChain
。一个 DistributionChain
可以有一个或多个 Shop
或 RecordingShop
,但也可以有 none 个。
在 Scores
索引 table 上,我想显示导出批处理操作并识别表单条目属于哪个 class(Shop
、RecordingShop
或 DistributionChain
)
是否可以这样做:
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,这并没有告诉我们任何东西。