我试图在ActiveAdmin中创建一个collection_action,这允许我在删除和添加后重新排列位置。我希望能够将列表拖放到索引中,并通过发布请求通过Ajax发送新位置
这是我到目前为止所做的:
ActiveAdmin.register Subscriber do
collection_action :reorder, :method => :post do
end
controller do
def reorder
@item = ResponsiveWeb.find(params[:id])
@item.position = params[:position]
@item.saved
render nothing: true
end
private
def item_params
params.require(:responsive_web).permit(:id, :position)
end
end
这些是路线:
Prefix Verb URI Pattern Controller#Action
new_admin_user_session GET /admin/login(.:format) active_admin/devise/sessions#new
admin_user_session POST /admin/login(.:format) active_admin/devise/sessions#create
destroy_admin_user_session DELETE|GET /admin/logout(.:format) active_admin/devise/sessions#destroy
admin_user_password POST /admin/password(.:format) active_admin/devise/passwords#create
new_admin_user_password GET /admin/password/new(.:format) active_admin/devise/passwords#new
edit_admin_user_password GET /admin/password/edit(.:format) active_admin/devise/passwords#edit
PATCH /admin/password(.:format) active_admin/devise/passwords#update
PUT /admin/password(.:format) active_admin/devise/passwords#update
admin_root GET /admin(.:format) admin/dashboard#index
batch_action_admin_admin_users POST /admin/admin_users/batch_action(.:format) admin/admin_users#batch_action
admin_admin_users GET /admin/admin_users(.:format) admin/admin_users#index
POST /admin/admin_users(.:format) admin/admin_users#create
new_admin_admin_user GET /admin/admin_users/new(.:format) admin/admin_users#new
edit_admin_admin_user GET /admin/admin_users/:id/edit(.:format) admin/admin_users#edit
admin_admin_user PATCH /admin/admin_users/:id(.:format) admin/admin_users#update
PUT /admin/admin_users/:id(.:format) admin/admin_users#update
DELETE /admin/admin_users/:id(.:format) admin/admin_users#destroy
admin_dashboard GET /admin/dashboard(.:format) admin/dashboard#index
sort_admin_responsive_web POST /admin/responsive_webs/:id/sort(.:format) admin/responsive_webs#sort
reorder_admin_responsive_webs POST /admin/responsive_webs/reorder(.:format) admin/responsive_webs#reorder
然而,当我重新排序时,我得到了404 not found错误,当我检查错误日志时,它找不到具有id = reorder的ResponsiveWeb。
任何帮助将不胜感激!
答案 0 :(得分:0)
要声明收集操作,活动管理员提供另一个dsl。这是一个例子。你可以试试。
collection_action :reorder, method: :post do
# your resources or whatever you need
end
有一件事,主动管理资源DSL提供permit_params,因此您不需要在控制器上声明它。
希望这个答案有所帮助。