[英]Toggling an admin user with a form RoR
我正在為當前管理員創建一個切換按鈕,以打開/關閉用戶管理員狀態。 根據我的理解,我將需要一些json來執行此操作,但是我在此類別中非常有限,並且通常只是編程的初學者。 我正在使用Rails v5.0.1和ruby v2.3.2有關我希望它如何工作的信息:
管理員將訪問“用戶索引”,在那里他/她將能夠搜索所有用戶
通過使用before_actions(在控制器中)和if / else方法(在視圖中)開發的管理操作,可以刪除每個用戶或通過admin開/關切換每個用戶
注意:我的用戶表是名稱:字符串,電子郵件:字符串和管理:布爾默認值:假(出於明顯的原因)。 盡管沒關系,密碼是帶有摘要的pass / passconfirm。
我到處搜索過,但是嘗試發送補丁請求時遇到路由問題,或者由於我嘗試了新的操作而出現了簡單的語法錯誤
用戶控制器
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
和我的users / 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>
首先,不要讓該方法私有,因為那樣,該方法就不能直接訪問,這是第一部分。 只需將方法放在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%>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.