ActiveAdmin 批处理操作动态表单
ActiveAdmin Batch Action Dynamic Form
我正在使用 rails 4 和 ActiveAdmin。我使用自定义表单创建了一个批处理操作,为每个选定的设备创建一个带有内部版本号的任务。这是我的代码:
ActiveAdmin.register Device do
def get_builds
builds = []
Build.all.each do |build|
builds << [
"[#{build.resource} - #{build.version}] #{build.file_name}",
build.id
]
end
return builds
end
batch_action :create_task, form: {
build: get_builds()
} do |ids, inputs|
build = Build.find(inputs[:build])
Device.where(id: ids).each do |device|
Task.create({
device: device,
build: build
})
end
redirect_to admin_tasks_path
end
end
我的问题是批处理操作表单中的构建列表没有刷新。当我启动我的应用程序时,它确实有一个所有可用构建的列表,但是如果我添加或删除构建,构建列表不会刷新。
这当然是因为表单参数只对我的函数求值一次,但我找不到任何关于 "dynamic" 表单的文档。
ActiveAdmin 在加载时将 class 缓存在内存中,因此构建只计算一次。要重新计算每个负载,将 lambda
作为 form
的值传递,例如:
form_lambda = lambda do
builds = Build.all.map do |build|
["#{ build.resource } - #{ build.version } #{ build.file_name }", build.id]
end
{ build: builds }
end
batch_action :create_task, form: form_lambda do
# ...
end
@ahmacleod 在每次加载时重新计算的方法,通过传递 lambda 作为对我有用的表单值。
但我不得不面对这个错误
wrong number of arguments (given 1, expected 0)
解决此更改:
form_lambda = lambda do |id = nil|
# ...
end
我正在使用 rails 4 和 ActiveAdmin。我使用自定义表单创建了一个批处理操作,为每个选定的设备创建一个带有内部版本号的任务。这是我的代码:
ActiveAdmin.register Device do
def get_builds
builds = []
Build.all.each do |build|
builds << [
"[#{build.resource} - #{build.version}] #{build.file_name}",
build.id
]
end
return builds
end
batch_action :create_task, form: {
build: get_builds()
} do |ids, inputs|
build = Build.find(inputs[:build])
Device.where(id: ids).each do |device|
Task.create({
device: device,
build: build
})
end
redirect_to admin_tasks_path
end
end
我的问题是批处理操作表单中的构建列表没有刷新。当我启动我的应用程序时,它确实有一个所有可用构建的列表,但是如果我添加或删除构建,构建列表不会刷新。
这当然是因为表单参数只对我的函数求值一次,但我找不到任何关于 "dynamic" 表单的文档。
ActiveAdmin 在加载时将 class 缓存在内存中,因此构建只计算一次。要重新计算每个负载,将 lambda
作为 form
的值传递,例如:
form_lambda = lambda do
builds = Build.all.map do |build|
["#{ build.resource } - #{ build.version } #{ build.file_name }", build.id]
end
{ build: builds }
end
batch_action :create_task, form: form_lambda do
# ...
end
@ahmacleod 在每次加载时重新计算的方法,通过传递 lambda 作为对我有用的表单值。
但我不得不面对这个错误
wrong number of arguments (given 1, expected 0)
解决此更改:
form_lambda = lambda do |id = nil|
# ...
end