Ruby on Rails Enum Undefined方法

时间:2017-09-21 23:38:49

标签: ruby-on-rails ruby enums

我在rails中有一个包含属性authorization的用户模型。我想将它设计为一​​个包含用户授权级别的枚举:

class User < ApplicationRecord    
  enum authorization: [default: 0, moderator: 1, admin: 2]
  # User code
end

之后我在我的应用程序控制器中添加了一些方法,我想用来验证授权状态其他控制器中的用户。

#Application Controller

def moderator_required
  return redirect_to root_path if current_user.nil?
  redirect_to root_path if !current_user.admin? && !current_user.moderator?
end

def admin_required
  return redirect_to root_path if current_user.nil?
  redirect_to root_path unless current_user.admin?
end

我在Documentation找到了快捷方式user.admin?

即使我得到以下内容尝试使用admin_required方法时出错:

undefined method `admin?' for #<User:0x7091e20>

有没有人知道我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您正在使用哈希。尝试将枚举声明更改为:

enum authorization: { default: 0, moderator: 1, admin: 2 }

答案 1 :(得分:1)

从零开始并以1递增是默认设置,因此您甚至不需要哈希。这是相同的

enum authorization: [:default, :moderator, :admin]