Reputation: 43
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
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
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