2014-07-22 100 views
2

我是Ruby on Rails的新手,迄今为止,我创建了用户登录,注册,注销,但我想创建一个管理员用户,但我不知道这个怎么做。如何使用Ruby on Rails创建管理员用户

route.rb是:

Rails.application.routes.draw do 

    get 'courses/index' 

    get 'courses/new' 

    get 'courses/edit' 

    get 'courses/show' 

    get 'course/index' 

    get 'course/new' 

    get 'course/edit' 

    get 'course/show' 

    get 'sessions/signin' 

    get 'sessions/main' 

    get 'sessions/profile' 

    get 'sessions/setting' 

    get 'users/new' 

    get 'home/index' 

    resources :users, path_names: {new: "signup"} do 
    collection do 
     get "main", action: :new 
    end 
    end 

    resources :sessions, path_names: {new: "signin", destroy: "signout"} do 
    collection do 
     get :signin 
     get :main 
     get :profile 
     get :setting 
    end 
    end 

    resources :home, only: [], path: "" do 
    get :about 
    end 

    root 'home#index' 

    resources :courses, only: [:index, :new, :edit, :show] 
    #resources :course, only: [:index, :new, :edit, :show] 

    resources :courses 

    resources :course_groups 
    patch 'course_groups/:id/add_course', to: 'course_groups#add_course', as: 'course_group_add_course' 
    delete 'course_groups/:id/delete_course', to: 'course_groups#destory_course', as: 'course_group_destory_course' 


    resources :rules 
    patch 'rules/:id/add_group', to: 'rules#add_group', as: 'rule_add_course_group' 
    delete 'rules/:id/delete_group', to: 'rules#destroy_group', as: 'rule_destroy_course_group' 

    resources :requirements 
    patch 'requirements/:id/add_rule', to: 'requirements#add_rule', as: 'requirement_add_rules' 
    delete 'requirements/:id/delete_rule', to: 'requirements#destroy_rule', as: 'requirement_destroy_rules' 


    #resources :plans  
    resources :users do 
     resources :plans 
    end 
    patch 'users/:user_id/plans/:id/add_course', to: 'plans#add_course', as: 'plan_add_course' 
    delete 'users/:user_id/plans/:id/delete_course', to: 'plans#destory_course', as: 'plan_destory_course' 


    match '/about', to: 'home#about', via: 'get' 
    match '/signup', to: 'users#new', via: 'get' 
    match ':controller(/:action(/:id))(.:format)', via: 'get' 
    match '/signin', to: 'sessions#new', via: 'get' 
    match '/signout', to: 'sessions#destroy', via: 'delete' 
    match '/main', to: 'users#new', via: 'get' 
    #match '/profile', to: 'sessions#profile', via: 'get' 
    match '/setting', to: 'sessions#setting', via: 'get' 


    match '/editname', to: 'users#edit', via: 'get' 

    match '/show', to: 'users#show', via: 'get' 
    match '/profile', to: 'users#profile', via: 'get' 
    #match '/info', to: 'users#info', via: 'get' 
    #match '/changepass', to: 'users#edit', via: 'get' 
end 

和我users_controller.rb是:

class UsersController < ApplicationController 

    before_filter :check_if_signned_in, only: [:show, :edit, :update, :delete] 

    before_filter :signed_in_user, only: [:edit, :update] 

    before_filter :skip_password_attribute, only: :update 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to @user, notice: 'User was sucessfully created!' 
    else 
     render action: "new" 
    end 
    end 


    #if current user exits, then it can get back to the main page of user 
    def show 
    if current_user.nil? 
     @user = User.find(params[:id]) 
    else 
     @user = User.find(current_user) 
    end 

    end 


def edit 
    #@user = User.find(params[:id]) 
    #@user = User.find(current_user) 
    @user = current_user 
    @user.save 
    @title = "Edit profile" 
end 


def update 
    @user = User.find(params[:id]) 
    #@user = User.find(current_user) 
    #if @user.update_attributes(user_params) 
    if @user.update_attributes(user_params) 
    flash[:success] = "Profile updated." 
    #sign_in @user_params 
    redirect_to @user 
    else 
    @title = "Edit profile" 
    render 'edit' 
    end 
end 


    private 
    def user_params 
     params.require(:user).permit(:name, :email, :password, :password_confirmation) 
    end 

    def signed_in_user 
     redirect_to signin_path, notice: "Please sign in." unless signed_in? 
    end 

    def edit_user 
     params.require(:user).permit(:name) 
    end 

    def skip_password_attribute 
     if params[:password].blank? && params[:password_confirmation].blank? 
     params.except!(:password, :password_confirmation) 
     end 
    end 

end 

application_controller.rb是:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    #protect_from_forgery with: :exception 
    protect_from_forgery 

    #before_filter :session_expire 
    #before_filter :update_active_time 

    include SessionsHelper 

    def check_if_signned_in 
    deny_access unless signed_in? 
    end 


#def update_active_time 
# session[:expires_at] = default_expire 
#end 

def is_owner 
    current_user.id == params[:id] 
end 

#private 
# def get_session_time_left 
#  expire_time = session[:expires_at] #|| default_expire 
#  a = expire_time 
#  b = Time.now 
#  @session_time_left = (a - b).do_i 
     #@session_time_left = (expire_time - Time.now).do_i 
# end 


end 

任何人都可以教我如何创建一个管理员用户吗?当管理员用户登录时,它将转到另一个不同的页面。 提前谢谢!

回答

1

没有粗鲁,你的代码真的需要清理。

你的路线本身就是一团糟 - 我想我记得前几天给你一些代码来帮助他们,看来你已经使用它了!但是,你留在还有其他的路线 - 这很可能会导致大问题的路线


路线

首先,你需要得到为了您的路线:

#config/routes.rb 
resources :courses 
resources :users, path_names: {new: "signup"} do 
    collection do 
     get "main", action: :new 
    end 
end 

resources :sessions, path_names: {new: "signin", destroy: "signout", index: "main", edit: "profile", update: "setting"} 

resources :home, only: [], path: "" do 
    get :about 
end 

root 'home#index' 

resources :courses, only: [:index, :new, :edit, :show] 
resources :course_groups do 
    patch :add_course 
    delete :delete_course 
end 


resources :rules do 
    patch :add_group 
    delete :delete_group 
end 

resources :requirements do 
    patch :add_rule 
    delete :delete_rule 
end 

resources :users do 
    resources :plans do 
     patch :add_course 
     delete :delete_course 
    end 
end 


match '/about', to: 'home#about', via: 'get' 
match '/signup', to: 'users#new', via: 'get' 
match ':controller(/:action(/:id))(.:format)', via: 'get' 
match '/signin', to: 'sessions#new', via: 'get' 
match '/signout', to: 'sessions#destroy', via: 'delete' 
match '/main', to: 'users#new', via: 'get' 
match '/setting', to: 'sessions#setting', via: 'get' 
match '/editname', to: 'users#edit', via: 'get' 

简单地说,一切都在Rails is resource/object - orientated。这包括路线,因此,你应该确保每个route你有构造围绕资源(这就是为什么你可以定义路由作为resources等)

-

联系

要创建admin用户,可以使用几种选择:

  1. 有一个单独的admin模型
  2. User模型创建admin属性

我会强烈建议您在User模型中的admin属性 - 使之成为boolean列如下:

#new migration 
add_column :users, :admin, :boolean 

这将允许您拨打以下电话

@user = User.find params[:id] 
@user.admin? #-> true/false 

这将允许你使用两个控制器的几个条件语句&意见您的应用程序,或以确定用户是否有权限admin

相关问题