2011-06-01 65 views
1

我運行到定義用戶權限在我的康康舞控制器問題:慘慘未定義的方法「用戶」問題

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user 

    if user.role? :admin 
     can :manage, :all 
    else 
    can :read, :all 
    can :update, User do |user| 
     user.try(:user) == user 
    end 
    end 
    end 
end 

這導致NoMethodError:

undefined method `user' for #<User:0x000001050914c8> 

當我嘗試和編輯/更新用戶。其他一切似乎都很好。

任何幫助表示讚賞

鮑勃

+0

請告訴我'user.try(:用戶)==用戶的?在你的User模型中是否有一個叫'user'的方法? – Zabba 2011-06-01 23:07:31

回答

6

的問題是,

user.try(:user) == user 

基本上是試圖像你想只讓用戶更新用戶執行user.user == user

看起來模型屬性,如果有問題的用戶實例是登錄用戶。

試試這個:

can :update, User, :id => user.id 

這是說「可更新用戶模型時@user.id是一樣的current_user.id。」

您的塊符號不明確,因爲您的塊變量|user|與傳遞給能力模型的user相同。


作爲一個側面說明爲那些仍然得到關於Ruby一握,

can :update, User, :id => user.id 

相同:

can(:update, User, { id: user.id }) 
+0

嗨,謝謝你的回答。這工作完美。對於鐵軌來說是新手,有時候很難爲樹木找到木頭。 – 2011-06-01 23:33:08