2012-03-31 50 views
2

我有一个Rails 3.2.2应用程序使用Ruby版本1.9.2。我已经通过Railscasts上的tutorial来为我的用户创建基本身份验证。未定义的方法`admin?'当试图添加管理员用户

我不需要任何复杂的东西,比如记住我或者密码重置,我希望在研究使用Devise或类似的东西之前,对实际发生的事情有一个很好的理解。

目前我的用户帐户,我可以检查用户通过使用

<% if current_user %> 

登录所以我想能够做到

<% if current_user.admin? %> 

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

undefined method `admin?' 

我的理解是,上述检查如果管理员对于当前用户是真实的。我已经添加了一个管理员列到我的用户表,这是布尔值并设置为默认= 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: '[email protected]', password: 'secret', admin: 'true') 

正如我增加了一个管理员用户,而且我检查布尔值我认为这将是我需要做的一切。

我错过了什么吗?

+0

我不知道我理解的问题。是不是像'current_user.admin?'行一样工作,或者你问你的解决方案是否足够?如果是后者,那么是的,我认为这就是你真正需要一个简单的管理员用户实现的全部内容。 – 2012-03-31 15:51:49

+0

我会澄清这个问题;但是current_user.admin?导致一个'未定义的方法'admin?'' – dannymcc 2012-03-31 15:55:17

+0

你运行过'rake db:migrate'吗?你的模型不认为它有一个布尔型的'admin'字段。 – meagar 2012-03-31 16:05:43

回答

2

如果你已经尝试通过编辑原始迁移到admin列添加到您的表,你必须运行rake db:rollbackusers表,然后rake db:migrate与到位admin柱带来的表背。

您不能以这种方式编辑迁移,并期望结果自动显示在数据库中。如果你想添加列一个表,你需要生成第二个迁移:

$ rails g migration AddAdminToUsers 

然后使用add_column帮手:

class AddAdminToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :admin, :boolean, :default => false 
    end 
end 
+0

我仍在研究应用程序的基础知识,以便尽可能简化迁移,我已经更改了原始迁移,然后删除并重新创建了数据库。 – dannymcc 2012-03-31 16:10:56

+0

你是如何重新创建数据库的? – meagar 2012-03-31 16:11:35

+0

'rake db:drop' then'rake db:create && rake db:migrate'。我认为这可能是问题,因为架构似乎没有显示管理员列。 – dannymcc 2012-03-31 16:13:42

-2

编辑:我的错误,ActiveRecord显然应该提供这个。你是否运行迁移来更新模式?

你需要自己定义admin?方法。我不认为ActiveRecord的自动提供布尔属性谓词风格方法(虽然也许有一个宝石在那里,这是否?)

在用户模式,只需添加:

def admin? 
    admin 
end 

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

+0

将'def admin?'块添加到用户模型中会导致'未定义的局部变量或方法'admin''。 – dannymcc 2012-03-31 16:05:14

+1

不正确。 ActiveRecord将为布尔的“admin”属性提供一个“admin”访问器。 – meagar 2012-03-31 16:05:19

相关问题