我有一个用Devise创建的User模型类。
我的模型中有一个角色字段(admin = 0,user = 1)。
我的数据库的屏幕截图:
<% if current_user.active_admin? %>
<%= render 'layouts/admin' %>
<% else %>
<%= render 'layouts/user' %>
<% end %>
def active_admin?
#your logic here
end
我要登录。如果我是管理员检查角色,则为0渲染到布局/管理员。否则,我是用户检查角色是1,渲染到布局/用户。
我该如何在模型中编写代码来做到这一点?
答案 0 :(得分:3)
在您的user.rb文件中:
class User < ActiveRecord::Base
def active_admin?
role == 0
end
end
您认为:
<% if current_user.active_admin? %>
<%= render 'layouts/admin' %>
<% else %>
<%= render 'layouts/user' %>
<% end %>
答案 1 :(得分:2)
正如Mark所说,您可以只检查role
的0或1。
数据库中的任何列都将直接映射到模型上的方法。
几点:
ApplicationRecord
而不是ActiveRecord::Base
。#zero?
方法:class User < ApplicationRecord
def active_admin?
role.zero?
end
end
答案 2 :(得分:1)
无需添加检查角色的方法,您可以通过以下更改直接实现此目的。对于除0以外的任何值,它将返回true。
<% if current_user.role? %>
<%= render 'layouts/user' %>
<% else %>
<%= render 'layouts/admin' %>
<% end %>
答案 3 :(得分:1)
一种方法可以在应用程序控制器上添加一个方法
def after_sign_in_path_for(resource_or_scope)
if current_user.role==0
#your admin path
else
root_path
end
end
def authenticate_admin
unless (user_signed_in? and current_user.role !=0 )
redirect_to '/users/sign_in'
end
end
添加到所需的控制器
before_filter :authenticate_admin
layout 'admin'
答案 4 :(得分:-1)
在不使用模型的情况下尝试在HTML中
<%if current_user.role==0 %>
<%= render 'layouts/admin' %>
<%else%>
<%= render 'layouts/user' %>
<% end %>