2012-03-31 56 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

相關問題