简体   繁体   中英

Rails routing to the wrong controller action

Here is the output of 'rake routes'

$ rake routes
        new_user_session GET    /users/sign_in(.:format)            devise/sessions#new
            user_session POST   /users/sign_in(.:format)            devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)           devise/sessions#destroy
           user_password POST   /users/password(.:format)           devise/passwords#create
       new_user_password GET    /users/password/new(.:format)       devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)      devise/passwords#edit
                         PUT    /users/password(.:format)           devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)             devise/registrations#cancel
       user_registration POST   /users(.:format)                    devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)            devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)               devise/registrations#edit
                         PUT    /users(.:format)                    devise/registrations#update
                         DELETE /users(.:format)                    devise/registrations#destroy
              admin_root        /admin(.:format)                    admin/dashboard#index
         admin_dashboard        /admin/dashboard(.:format)          admin/dashboard#index
              admin_user PUT    /admin/users/:id(.:format)          admin/users#update
batch_action_admin_users POST   /admin/users/batch_action(.:format) admin/users#batch_action
             admin_users GET    /admin/users(.:format)              admin/users#index
                         POST   /admin/users(.:format)              admin/users#create
          new_admin_user GET    /admin/users/new(.:format)          admin/users#new
         edit_admin_user GET    /admin/users/:id/edit(.:format)     admin/users#edit
                         GET    /admin/users/:id(.:format)          admin/users#show
                         PUT    /admin/users/:id(.:format)          admin/users#update
                         DELETE /admin/users/:id(.:format)          admin/users#destroy
                    root        /                                   home#index

And here is an excerpt from the logs

Started POST "/admin/users/batch_action" for 127.0.0.1 at 2013-01-18 23:07:07 +0530
Processing by Admin::UsersController#create as HTML

Why is /admin/users/batch_action getting routed to Admin::UsersController#create , when the routes shows batch_action_admin_users POST /admin/users/batch_action(.:format) admin/users#batch_action

I am using ActiveAdmin and these are the routes that it generates.

It seems like you are using resources for routing admin/users controller, so POST http verb is defaulted to create action in the controller.

If you would like to add another restful POST controller action, do something like this,

scope "admin" do
  resources :users do
    member do
      post 'batch_action'
    end
  end
end

I don't know how your routes.rb looks like, so it might look different in your routes.rb file. But it should look similar.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM