保华的Rails学习笔记

is_admin的实现方法

教程中is_admin的实现方法是一步一步来的,为了记住最终的代码,我还是做一个提取笔记吧,整理一下步骤,顺便也再记一遍,而且觉得is_admin很多会员系统中会用到,所以还是挺重要的

1、修改controller

1)在controller文件中最上边添加before_action :require_is_admin
2)在controller文件中定义require_is_admin

def require_is_admin
    if !current_user.admin?
    flash[:alert] = "You are not admin"
    redirect_to root_path
end

理解:首先执行before_action中的require_is_admin,这是就会在这个controller中找这个函数,这个函数中包含了一个陌生函数admin?(current_user.admin?),于是就会去对应的model文件中找(user.rb)。

2、修改models/user.rb文件

在这个文件中要定义函数admin?(注意有?,ruby语法中约定boolean类型的变量都要加?)

def admin?
    is_admin
end

理解:在上一步,rails遇到不认识的admin?,就来model中找,这一步就是定义了admin?
在admin?中,写了一行is_admin,而is_admin将会在下一步定义为users这个表格的一个字段,而且为boolean类型,所以这里单独写一个is_admin就表示这个值为true(boolean类型有true与false)

3、在users这个table,增加一个字段is_admin,而且类型设置为boolean,默认值为false

实现如下:
1)在终端执行rails g migration add_is_admin_to_user
2)在db/migrate目录下新产生的rb文件(一长串数字开头)中,增加字段

def change
    add_column :users, :is_admin, :boolean, default: false
end

注意这里的users,要记得加s
这样每注册一个用户名,默认的布尔值都为false
3)终端执行rake db:migrate
这样,就会在users表增加一个字段is_admin,而且它们的初始值都为false

4、在终端把某个用户的is_admin值设置为true(这里我们把注册的第一个用户设置为admin用户)

1)终端输入rails c
2)u = User.first
3)u.is_admin = true
4)u.save
注意别忘记了第4步u.save

5、为了在其它地方也能用require_is_admin,需要把 require_is_admin 移到 application_controller

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  def require_is_admin
    if !current_user.admin?
      flash[:alert] = 'You are not admin'
      redirect_to root_path
    end
  end
end

这样其它地方也可以用这个method了