在/views/layouts
目录中,如何获取当前用户?我正在使用Devise,但current_user
由于某种原因在这里不起作用,它将其描述为一种未知方法。我想做点什么:
<% if User.role? == "gen_admin" %>
<li>
<%= link_to('Admin', users ) %>
</li>
<% end %>
我的用户模型中定义了role?
方法,但我仍然遇到此异常:
undefined method 'role?' for #<Class:0x3fcc1e0>
那么如何获取当前用户,并在源树的这个级别访问其字段?谢谢!
这是角色?方法:
# in User
ROLES = %w[gen_admin teacher_admin student]
def role?(base_role)
ROLES.index(base_role.to_s) <= ROLES.index(role)
end
答案 0 :(得分:8)
您的代码必须考虑用户何时登录以及何时未登录。
如果没有用户登录,则current_user
将返回nil(如您的情况,您认为这是Devise的错误)。
您的视图代码必须处理此问题 - 例如。
<% if current_user.present? && current_user.role?('gen_admin') %>
答案 1 :(得分:2)
您已将role?
方法定义为实例方法。这意味着为了使用它,您应该首先从User
类创建实例,例如:
@user=User.new
现在您可以致电@user.role?
如果您希望role?
可以通过模型User
使用,那么您应该将其定义为类方法,并在对象中传递以进行验证
def self.role?(user)
...
end
答案 2 :(得分:1)
您需要更改视图中的代码才能使用current_user
而非User
,并正确调用role?
方法(否==
)。如果在未登录用户可以访问的视图中使用此功能,则需要先确认用户已登录(因此您不要尝试在{{1}上调用role?
这会产生异常):
nil
答案 3 :(得分:-1)
您是否忘记在控制器中添加before_filter :authenticate_user!
?这将确保您的视图中可以使用current_user