Прежде всего, измените ваш get
метод на put
в вашем rout.rb , потому что вы будете обновлять ресурс в базе данных:
Rails.application.routes.draw do
root to: 'pages#home'
get 'users/users_page'
devise_for :users
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user
// it will require user id in your url
resources :users do
member do
put :change_user_role
end
end
end
Подробнее о маршрутах здесь
Затем измените ваш взгляд на что-то вроде этого:
<h1>Users</h1>
<% @users.each do |user| %>
<h5><%= user.email %></h5>
<%= form_for(user, url: change_user_role_user_path(user)) do |f| %>
<%= f.check_box(:admin) %>
<p><%= f.submit 'Submit Answer' %></p>
<% end %>
<br>
<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
<% end %>
Подробнее о формах здесь
Ваш контроллер должен выглядеть примерно так:
class UsersController < ApplicationController
def users_page
@users = User.all
end
def change_user_role
@user = User.find(params[:id])
// if user is updated successfully then redirect
if(@user.update_attributes(user_params)
format.html { redirect_to users, notice: 'Role changed successfully' }
end
end
def destroy
@user = User.find(params[:id])
if @user.destroy
redirect_to root_url, notice: "User deleted."
end
end
// new method added to allow specific attributes only and discarding other malicious attributes that user may send
def user_params
params.require(:user).permit(:admin)
end
end
Подробнее о параметрах здесь
Надеюсь, это поможет :)