我有一个使用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,我认为这就是我需要做的全部。
我错过了什么吗?
答案 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
,它应该这样做。虽然我有点像谓词。