簡體   English   中英

使用表單RoR切換管理員用戶

[英]Toggling an admin user with a form RoR

我正在為當前管理員創建一個切換按鈕,以打開/關閉用戶管理員狀態。 根據我的理解,我將需要一些json來執行此操作,但是我在此類別中非常有限,並且通常只是編程的初學者。 我正在使用Rails v5.0.1和ruby v2.3.2有關我希望它如何工作的信息:

  1. 管理員將訪問“用戶索引”,在那里他/她將能夠搜索所有用戶

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM