我正在为当前管理员创建一个切换按钮,以打开/关闭用户管理状态。根据我的理解,我将需要一些json来执行此操作,但我在此类别中非常有限,并且我只是一般编程的初学者。我正在使用rails v5.0.1和ruby v2.3.2有关我希望如何工作的信息:
管理员将访问他/她将能够搜索所有用户的用户索引
可以通过使用before_actions(在控制器中)和if / else方法(在视图中)开发的管理操作来删除或管理开/关切换管理员
注意:我的用户表是name:string,email:string和admin:boolean default:false(原因很明显)。虽然密码与摘要传递/通过确认无关紧要。
我到处搜索但是在尝试发送修补程序请求或简单的语法错误时遇到路由问题,因为我尝试了一些新的
用户控制器
class UsersController < ApplicationController
include UsersHelper
before_action :logged_in_user, only: [:edit, :update, :index]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: [ :destroy]
def index
@users = User.paginate(page: params[:page])
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success]= "Welcome #{@user.name}!"
redirect_to user_path(@user)
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success]= "#{@user.name} you have successfully updated account information"
redirect_to user_path(@user)
else
render 'edit'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
redirect_to users_url
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
def make_admin
@user = User.find(params[:id])
@user.toggle!(:admin)
redirect_to users_path
end
end
和我的用户/ index.html.erb:
<h1>Users Index</h1>
<div class="container-fluid">
<div class="col-xs-6">
<%= will_paginate %>
<ul class="users">
<% @users.each do |user| %>
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
<% if current_user.admin? && !current_user?(user) %> |
<%= button_to [:make_admin, @user] do %>
Make <%= @user.name%> an admin?
<%= link_to "delete", user, method: :delete,
data: { confirm: "Are you sure?" } %> |
</li>
<% end %>
<% end %>
</ul>
<% end %>
<%= will_paginate %>
</div>
</div>
答案 0 :(得分:0)
首先不要让方法处于私有状态,因为这样,该方法不能直接访问,这是第一部分。只需将方法放在private
行上方。
如果您的路线中有用户资源,请添加此
resources :users do
match :make_admin, :via => [:get]
end
然后我们来看看链接
<%= link_to user_make_admin_path(user.id) do %>
Make <%= user.name%> an admin?
<% end%>