Sreejith Ponn
Sreejith Ponn

Reputation: 43

Ruby on Rails - Updating a record through link

Newbie to rails and in general to programming here! I am doing rails tutorial and currently at chapter 10, where the user model is pretty much completed. I am trying to add a new functionality to make a user an admin user, by providing a link to other admin users, next to the the destroy action.

my link definition as as follows:

  <% if current_user.admin? && !current_user?(user) %>  
    | <%= link_to "Make admin", user, method: :makeAdmin,
                                  data: { confirm: "You sure?" } %>
  <% end %>

My controller definition:

  def makeAdmin
    @user = User.find(params[:id])
    @user.update_columns(admin_user: true)
    flash[:success] = "Made an admin"
    redirect_to @user
  end

I was hoping that the above works, but I got a routing error so, after searching through stackoverflow, I made some modifications on routes as follows:

  resources :users do
    member do
      put 'makeAdmin'
    end
  end

It still does not work, the routing error persists.

Any ideas please?

rake routes are here:

                 Prefix Verb   URI Pattern                             Controller#Action
    password_resets_new GET    /password_resets/new(.:format)          password_resets#new
   password_resets_edit GET    /password_resets/edit(.:format)         password_resets#edit
           sessions_new GET    /sessions/new(.:format)                 sessions#new
              users_new GET    /users/new(.:format)                    users#new
                   root GET    /                                       static_pages#home
                   help GET    /help(.:format)                         static_pages#help
                  about GET    /about(.:format)                        static_pages#about
                contact GET    /contact(.:format)                      static_pages#contact
                 signup GET    /signup(.:format)                       users#new
                  login GET    /login(.:format)                        sessions#new
                        POST   /login(.:format)                        sessions#create
                 logout DELETE /logout(.:format)                       sessions#destroy
         makeAdmin_user POST   /users/:id/makeAdmin(.:format)          users#makeAdmin
                  users GET    /users(.:format)                        users#index
                        POST   /users(.:format)                        users#create
               new_user GET    /users/new(.:format)                    users#new
              edit_user GET    /users/:id/edit(.:format)               users#edit
                   user GET    /users/:id(.:format)                    users#show
                        PATCH  /users/:id(.:format)                    users#update
                        PUT    /users/:id(.:format)                    users#update
                        DELETE /users/:id(.:format)                    users#destroy
edit_account_activation GET    /account_activations/:id/edit(.:format) account_activations#edit
        password_resets POST   /password_resets(.:format)              password_resets#create
     new_password_reset GET    /password_resets/new(.:format)          password_resets#new
    edit_password_reset GET    /password_resets/:id/edit(.:format)     password_resets#edit
         password_reset PATCH  /password_resets/:id(.:format)          password_resets#update
                        PUT    /password_resets/:id(.:format)          password_resets#update

Upvotes: 2

Views: 62

Answers (2)

Sreejith Ponn
Sreejith Ponn

Reputation: 43

This was accomplished as follows!

Routes

resources :users do
    member do
      put 'makeadmin'
    end
  end

Controller Def

  def makeadmin
    @user = User.find(params[:id])
    @user.update_attribute :admin, true
    flash[:success] = "this user was made admin"
    redirect_to users_url
  end

Link

| <%= link_to "Make admin", makeadmin_user_path(user), :method=> :put %>

Thanks to http://media.railscasts.com/assets/episodes/videos/035-custom-rest-actions.mp4

Upvotes: 0

hedgesky
hedgesky

Reputation: 3311

Try to fix it to this:

<%= link_to "Make admin", make_admin_user_path(user), method: :put,
                              data: { confirm: "You sure?" } %>

Upvotes: 1

Related Questions