Charles Duporge
Charles Duporge

Reputation: 672

ActiveAdmin : member_action "approve" on User model

I want to add a member_action named approve on my User model in ActiveAdmin. I looked at docs but everything is different and i'm quite confused about how to do it. Until now, I've only make it to show the approve link (next to View, Edit and Delete).

admin/user.rb :

member_action :approve, method: :post do
    user = User.find params[:id]
    user.approve!
    redirect_to admin_user_path(user), notice: "Approved!"
  end

and to show the link:

actions defaults: true do |user|
    link_to 'Approve',approve_admin_user_path(user)
end

models/user.rb :

def approve!
    update(bio_validee: true)
end

When I click on the link , I have a Routing Error with :

No route matches [GET] "/admin/users/21/approve"

Here what rake routes does (for admin/users routes):

approve_admin_user POST       /admin/users/:id/approve(.:format)              admin/users#approve
        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
                      admin_user GET        /admin/users/:id(.:format)                      admin/users#show
                                 PATCH      /admin/users/:id(.:format)                      admin/users#update
                                 PUT        /admin/users/:id(.:format)                      admin/users#update
                                 DELETE     /admin/users/:id(.:format)                      admin/users#destroy

Have I done something wrong? What do I have to add ? Furthermore, I don't know if I have to use GET, POST, or PUT in

member_action :approve, method: :post

I don't really get the difference in that case.

Upvotes: 2

Views: 3033

Answers (1)

Mark Fraser
Mark Fraser

Reputation: 3198

Try this:

member_action :approve, method: :put do
  resource.approve!
  redirect_to admin_user_path(resource), notice: "Approved!"
end

And ....

actions defaults: true do |user|
  link_to 'Approve',approve_admin_user_path(user), method: :put
end

Upvotes: 6

Related Questions