未定义的方法`admin?'在尝试添加管理员用户时

时间:2012-03-31 15:10:31

标签: ruby-on-rails-3 authentication boolean admin

我有一个使用Ruby版本1.9.2的Rails 3.2.2应用程序。我已按照Railscast上的tutorial为我的用户创建了基本身份验证。

我不需要任何复杂的内容,例如记住我或密码重置,我希望在研究使用Devise或其他类似内容之前,能够很好地了解实际情况。

目前我有用户帐户,我可以使用

检查用户是否已登录
<% if current_user %>

所以我希望能够做到

<% if current_user.admin? %>

如果我使用上述admin?检查,我会收到以下错误:

undefined method `admin?'

我的理解是上面检查管理员是否对当前用户是真的。我在我的用户表中添加了一个管理列,它是boolean并设置为default = false。

create_table :users do |t|
  t.string :name
  t.string :initials
  t.string :email
  t.string :password_digest
  t.boolean :admin, :default => false

我还将管理列添加到种子文件中,因此我可以拥有测试管理员帐户

User.create(name: 'Danny', initials: 'DAN', email: 'danny@railsapplication.co.uk', password: 'secret', admin: 'true')

由于我添加了一个管理员用户,并且我正在检查布尔值是否为true,我认为这就是我需要做的全部。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

如果您尝试通过修改原始迁移来向表中添加admin列,则必须运行rake db:rollback以删除users表,然后{ {1}}将表格放回rake db:migrate列。

您无法以这种方式编辑迁移,并希望结果自动显示在数据库中。如果要向表中添加列,则需要生成第二次迁移:

admin

然后使用$ rails g migration AddAdminToUsers 帮助器:

add_column

答案 1 :(得分:-2)

编辑:我的错误,ActiveRecord显然应该提供这个。您是否运行迁移以更新架构?

您需要自己定义admin?方法。我不认为ActiveRecord会自动为布尔属性提供谓词样式方法(虽然可能有一个宝石可以做到这一点吗?)

在您的用户模型中,只需添加:

def admin?
  admin
end

或者只使用current_user.admin,它应该这样做。虽然我有点像谓词。