方法: 给登陆者添加状态信息

我们需要给user加入一个值来判断他们的身份,比如普通用户和管理员。

使用rails Enums的方法

为users的表单新增栏位status 在models/user.rb,设定状态值。enum status:{ user: 0, admin: 1 }

改写注册表单

使用这个命令rails generate devise:views让隐藏的devise views显示出来。

registrations/new.html.erb里面填加<%= f.select :status, User.statuses.keys %>

使用User.statuses.keys会调出你在model填写的所有user的status。

模改Devise的Strong Paramters,让用户可以成功储存status

我们发现submit的时候,status这个参数是上传不上去的。 那怎么办,这时候我们就需要模改devise的controller了。 先建立一个User::RegistrationsController让它继承自Devise::RegistrationsController,复写里面的configure_permitted_parameters方法。

class Users::RegistrationsController < Devise::RegistrationsController

 before_filter :configure_permitted_parameters

 protected

 def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:status])
 end
end

更改路由,让Devise使用User::RegistrationsController

devise_for :users, :controllers => { :registrations => "user/registrations" }

user status成功被储存。

对于不同的用户注册或登录之后的跳转不同的页面

ApplicationController里面添加方法:

def after_sign_in_path_for(resource)
  if current_user && current_user.status == "admin"
    company_works_path
  elsif current_user && current_user.status == "user"
    root_path
  else
    root_path
  end
end

User::RegistrationsController里面添加方法:

...

protected

...

def after_sign_up_path_for(resource)
  if params[:status] = "admin"
    company_works_path
  elsif params[:status] = "user"
    root_path
  end
end

参考