3

有没有办法通过预设集合向 Active Admin 添加批量编辑?我的产品模型包含一个category字段。

我的 ActiveAdmin 的表单如下所示:

f.input :category,as: :radio, collection:['cat1', 'cat2', 'cat3']

所以我可以在一个集合中选择一个类别。我想添加批量编辑,以便我可以检查许多字段,然后为它们分配上一个集合中的类别。

我的第一个想法是添加许多批处理操作(一个用于 cat1,一个用于 cat2,一个用于 cat3,等等。但是,批处理操作菜单将包含 10 多个元素......

必须有更好的方法来做到这一点,是吗?

4

2 回答 2

8

您可以使用自己的操作呈现自定义视图并从那里发布对类别的更改。像这样的东西:

admin/product.rb

batch_action :set_category do |selection|
  if (@products = Product.where(id: selection)).blank?
    redirect_to :back, flash: {error: "No products were selected!"}
  else
    render template: 'products/edit_group_category' #, layout: 'some_custom_layout' - I had some problems trying to use active_admin layout here, but custom one works fine (you may need it for styling)
  end
end

views/products/edit_group_category.html.haml

=form_for :group_category, url: :update_group_category do |f|
  -@products.each do |product|
    =f.hidden_field :products, :multiple => true, :value => product.id

  =f.input :category, as: :radio, collection:['cat1', 'cat2', 'cat3']

  =f.submit 'Submit'

controllers/products_controller.rb

def update_group_category
  products = Product.where(params[:group_category][:products])

  #set here category with name params[:group_category][:category] to all of products

  redirect_to '/admin/products', notice: 'Category set' #you may have another redirect path
end

routes.rb

post 'update_group_category' => 'products#update_group_category'

您可以尝试将该update_group_category操作置于admin/product.rb块中controller,但我认为将其保留在普通控制器中会更好。


另一种可能更用户友好的方式是使用 js 和 ajax - 您可以使用拦截批处理操作提交事件

$("#collection_selection").submit ->
  if $("#batch_action").val() == "set_category"
    dialog_url = '/products/edit_group_category?'+ $(this).serialize();
    openDialog dialog_url
  false

一些函数在哪里openDialog,应该dialog_url通过 AJAX 加载所需的表单并将其显示在对话框中(如jQuery UI 对话框)。在控制器操作edit_group_category中,您可以使用Product.where(id: params[:collection_selection])

由于批处理操作块永远不会以这种方法运行,因此您可以只batch_action :set_category留下admin/product.rb

于 2013-09-22T13:54:23.123 回答
1

@biomancer 有一个很好的答案,我打算实施,然后我发现ActiveAdmin现在有Batch Action Forms;这更容易!

于 2015-01-09T20:33:27.480 回答