Jus*_* D. 3 ruby-on-rails ruby-on-rails-3 activeadmin
有没有办法使用预设集合向Active Admin添加批量编辑?我的产品型号包含一个category字段.
我的ActiveAdmin表单如下所示:
f.input :category,as: :radio, collection:['cat1', 'cat2', 'cat3']
Run Code Online (Sandbox Code Playgroud)
所以我可以在一个集合中选择一个类别.我想添加批量编辑,以便我可以检查许多字段,然后为它们分配上一个集合中的类别.
我的第一个想法是添加许多批处理操作(一个用于cat1,一个用于cat2,一个用于cat3等.但是,批处理操作菜单将包含10个以上的元素...
必须有更好的方法来做到这一点,是吗?
您可以使用自己的操作呈现自定义视图并将更改发布到该类别.像这样的东西:
在 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
Run Code Online (Sandbox Code Playgroud)
在 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'
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
在 routes.rb
post 'update_group_category' => 'products#update_group_category'
Run Code Online (Sandbox Code Playgroud)
你可以尝试把该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
Run Code Online (Sandbox Code Playgroud)
哪个openDialog是函数,应该从dialog_url通过AJAX 加载所需的表单并在对话框中显示它(如jQuery UI对话框).在控制器操作中,edit_group_category您可以访问所选产品Product.where(id: params[:collection_selection])
由于批量操作块永远不会以这种方式运行,因此您可以将其留batch_action :set_category在admin/product.rb
| 归档时间: |
|
| 查看次数: |
1791 次 |
| 最近记录: |