Rails,设计。 除非AdminUser,否则禁止用户操作

我有使用 Devise创建的用户模型, 类型为:string属性和AdminUser模型( AdminUser < User )。

在应用程序控制器中,我定义了:require_admin方法:

  def require_admin unless current_user == AdminUser flash[:error] = "You are not an admin" redirect_to store_index_path end end 

在我设置的产品控制器上

 before_action :require_admin, except: :show 

现在我通过控制台成功创建了一个AdminUser(使用AdminUser id),当我登录应用程序时,我仍然无法使用这些操作(创建,编辑等)。

有任何想法吗?

 current_user == AdminUser 

检查current_user对象是否等于 AdminUser类。

你想要的是检查current_user的类是否是AdminUser

 current_user.class == AdminUser # or current_user.is_a?(AdminUser) # or current_user.kind_of?(AdminUser) # or current_user.instance_of?(AdminUser) # or AdminUser === current_user 

我相信它应该是current_user.is_a?(AdminUser)

来源: is_a? 方法文档