2012-05-31 33 views
1

好吧,我遵循github上的railsapps模板指令,在CanCan上隨意複製了ryanb的railscast(爲我的Event模型交換了Comment變量)。我已經建立了一個新用戶,併爲其賦予管理員角色的一部分能力分配給「贊助者」角色。當我在Rails中加載時,我得到設計> CanCan> Rolify錯誤分配角色

未定義的方法`角色?'對於用戶:0x08 ...

好的,我在控制檯內向後工作,以重新分配一個新用戶到「主辦方」角色,並查看是否有問題。如果你低頭看看結果,我會看到一些似乎被破壞的東西,但不確定如何解決它。這裏是我的ability.rb

class Ability 
include CanCan::Ability 

def initialize(user) 
    user ||= Us # guest user (not logged in) 
    if user.has_role? :admin 
    can :manage, :all 
    else 
    can :read, :all 
    end 

    if user.role? :sponsor 
    can :create, Event 
    can :read, Event 
    can :update, Event do |event| 
     event.try(:user) == user 
    end 
    else 
    can :read, :all 
    end 

end 
end 

我event.rb:

resourcify 
    belongs_to :school 

一所學校has_many eventshas_and_belongs_to_many_usersbelongs_to :event。在控制檯中,我使用正確的名稱,school_id,電子郵件等創建了一個new_user,按預期工作。我然後:

user.add_role "sponsor" 

這工作,我可以看到,用戶id排隊與贊助商的角色ID。下一步是我認爲我的問題開始的地方。

ability = Ability.new(new_user) 

即產生以下:。

SELECT COUNT(*)FROM 「角色」 INNER JOIN 「users_roles」 ON 「角色」 的 「ID」= 「users_roles」 「ROLE_ID」 WHERE「 users_roles」。 「USER_ID」= 5 AND(((名稱= '管理員')和(RESOURCE_TYPE IS NULL)

的user_id是正確的,但在 「名稱」 不是 '管理員'。我想它應該拉'贊助商'的名字?

這可能是一個簡單的問題,但我猜這個錯誤分配可能是我爲什麼上面顯示的事件#索引錯誤出現的問題的根源。它似乎認爲Ability.new卡在「管理員」上。我在忽略什麼,thanx,山姆

回答

2

您正在用錯誤的代碼查詢用戶的角色。

user.role? :sponsor # wrong 

隨着rolify你需要像這樣

user.has_role? :sponsor 
user.has_role? :sponsor, School 
user.has_role? :sponsor, School.first 

在控制檯簡單rolify命令嘗試沒有康康舞

user.add_role :sponsor 
user.has_role? :sponsor 

這是非常正常的,Ability.new產生一個選擇查詢與管理員角色,因爲你有

if user.has_role? :admin 

在您的能力初始值設定中

相關問題