ActiveAdmin批处理动态表单



我使用rails 4与ActiveAdmin。我使用自定义表单创建了一个批处理操作,为每个选定的设备创建一个带有Build号的任务。下面是我的代码:

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

我的问题是,在批处理操作的形式的构建列表不刷新。当我启动我的应用程序时,它确实有一个所有可用构建的列表,但如果我添加或删除一个构建,构建列表将不会刷新。

这当然是因为表单参数只评估我的函数一次,但我找不到任何关于拥有"动态"表单的文档。

ActiveAdmin在加载时缓存内存中的类,因此构建只计算一次。为了在每个负载上重新计算,传递一个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

最新更新