我正在使用Rails 4.1和Ruby 2.1.1
我的用户模型中有一行:
enum role: [:user, :admin, :team_admin, :domain_admin, :super_admin]
在我的控制器中,我想只做一些事情,如果我的用户是:domain_admin
并且我使用以下测试:
if @user.role == :domain_admin
当@user.role
(在控制台中)返回:domain_admin
时,测试返回false。所以价值设置得当,但我必须误解测试它的平等性,或者枚举不能像我以前想的那样工作。我从阅读文档中假设它们是一个薄层(小)整数。
有人能告诉我如何测试:domain_admin
的相等性,以及如何测试>= :domain_admin
?
非常感谢。
答案 0 :(得分:6)
@user.domain_admin? # return true if :domain_admin
代替:
@user.role == :domain_admin
使用:
@user.role == "domain_admin"
一些测试:
=> User.roles
=> {"user"=>0, "staff"=>1, "admin"=>2}
=> u = User.last
=> u.role
=> "user"
=> u.role == "user" # <-- this
=> true
=> User.roles.each_pair { |x, _| puts u.role == x }
=> true
=> false
=> false