2013-03-01 51 views
0

我正在使用設計& CanCan爲我的應用程序。當用戶登錄,他們被帶到他們的賬戶頁面 - 我已經設置了一個自定義的重定向這樣的:CanCan停止設計重定向

def after_sign_in_path_for(resource) 
    url_for :controller => '/users', :id => current_user.id, :action => 'myaccount' 
end 

然而,當我嘗試了當用戶註冊做同樣的 - 即使用after_sign_up_path_for(資源),那麼我給出的這個錯誤:

NoMethodError in UsersController#show 

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

它指的是我設立了慘慘的ability.rb文件,該文件是這樣的:

class Ability 
    include CanCan::Ability 

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

    can :manage, :all do |all| 
     all.try(:user) == user 
    end 

線跟它是概率lem是all.try(:user)==用戶。我不明白爲什麼這會導致問題?這似乎是,無論我爲重定向提供什麼,它總是會讓我去例如{app}/users/22併發出此錯誤。

+0

你可能想把它分成模型而不是嘗試。如果您需要更新權限,稍後將更容易閱讀和操作。 – jvnill 2013-03-01 16:06:00

回答

0

請按照SO post的說明,您正試圖執行user.try(:user) == user這是您所有問題的根源。

因此,您可以使用can :manage, :all, :id => user.id來解決問題。

+0

謝謝,這已經阻止了發生的錯誤。但是,當我註冊一個新用戶時,他們仍然被重定向到/ user /:id,而不是重定向中指定的user /:id/myaccount。任何想法爲什麼? – ecs 2013-03-01 13:15:21

+0

如果刪除'can:manage'代碼,重定向是否仍然存在? – 2013-03-01 13:20:27

+0

如果我拿走can:manage塊,那麼用戶將被重定向到具有訪問被拒絕異常的根網址。這很奇怪,因爲如果我在錯誤屏幕出現時手動輸入url,它將允許訪問正確的頁面,並且我仍然會獲得'成功註冊'的flash。 – ecs 2013-03-01 14:11:04