Ruby on rails Rails模型属性

Ruby on rails Rails模型属性,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,这里有点疯狂。我正在通过电子邮件对用户进行非常简单的查找,然后如果有用户检查其角色。举个简单的例子 user = User.find_by_email(params[:email]) if user if user.role == 'admin' abort("Yay were an admin") end end 用户的角色如示例中所示,但if语句没有返回true 如果我检查用户ie if user raise user.to_yaml end 我得到了有效的属性 --

这里有点疯狂。我正在通过电子邮件对用户进行非常简单的查找,然后如果有用户检查其角色。举个简单的例子

user = User.find_by_email(params[:email])
if user
  if user.role == 'admin'
    abort("Yay were an admin")
  end
end
用户的角色如示例中所示,但if语句没有返回true

如果我检查用户ie

if user
  raise user.to_yaml
end
我得到了有效的属性

--- !ruby/object:User
attributes:
  id: 1
  email: user@test.com
  created_at: 2011-12-01 08:37:45.000000000Z
  updated_at: 2011-12-01 08:37:45.000000000Z
  role: admin
为什么if语句不能返回true?我知道用户有一个roel,就好像我有一个roel一样,如果user.role返回true

在rails控制台中执行同样的操作将为我提供用户角色

ruby-1.9.2-p180 :001 > u = User.find_by_email('user@test.com')
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'user@test.com' LIMIT 1
 => #<User id: 1, email: "user@test.com", created_at: "2011-12-01 08:37:45", updated_at: "2011-12-01 08:37:45", role: "admin"> 
ruby-1.9.2-p180 :002 >

有什么想法吗?

可能是保留了列名
角色
,具体取决于您使用的数据库,这可能会导致各种奇怪的冲突

我的第一个Rails项目在sqlite3中使用了一个名为
error
的列时遇到了同样的问题-尝试将
role
列重命名为
project\u role
或类似的名称,看看是否有帮助


在yup.com上有一个很好的资源来检查保留的名字,它已经被删除了,这是我能找到的唯一的镜像

根据您的评论,
用户的角色属性返回一个符号。因此,您的测试应该是

if user.role == :admin
  abort("Yay were an admin")
end

控制台中的用户实例是什么样子的?您的角色是否可能返回一个不是字符串的数据类型(但将在Yaml中转换为字符串,例如符号)?您好,David,在控制台中,它会查找用户和角色,但如果语句也失败。我编辑了这个问题。你能试试这个语句看看这个属性是否真的返回字符串吗
user.role.class.name
Adding abort(user.role.class.name)现在给我Symbolok,如果我执行“if user['role']”语句返回true。我本以为应该是user.role,还是我出了什么问题?我现在知道了原因。在用户模型中,我使用了一个enum插件,它将用户角色转换为一个符号。谢谢,但我可以踢自己
if user.role == :admin
  abort("Yay were an admin")
end