2012-07-10 97 views
2

我試圖按照this answer對類似的問題,但在我的情況下,我使用Rolify如何使用Rolify根據角色重定向根?

我遇到的問題是在passthrough_controller.rb,我無法訪問Rolify .has_role?功能:

class PassthroughController < ApplicationController 
    def index 
    if current_user.has_role? :admin 
     redirect_to 'restaurants#index' 
    else 
     redirect_to 'http://www.google.com' 
    end 
    end 
end 

我已經登錄使用,我知道有一個管理角色的用戶,但它仍然重定向我到我的else條款。

我無法找到如何做到這一點的Rolify github任何頁面上。

任何幫助將不勝感激

+0

是否CURRENT_USER肯定工作,而不是返回null?你在使用Devise和CanCan嗎? – AJcodez 2012-07-10 21:09:12

+0

我非常確定'current_user'的工作原理是因爲如果我嘗試'current_user.role',我會在#消息中爲'未定義方法'角色獲取'PassthroughController#index'中的NoMethodError。是的,我正在使用Devise和CanCan。 – FilmiHero 2012-07-10 21:13:46

+0

您是否生成了角色模型並按照自述文件中的所有步驟操作? – AJcodez 2012-07-10 21:15:54

回答

0

該解決方案其實很簡單。

我只需要我的前綴與restaurants#index一個/所以我的代碼應該已經是這樣的:

def index 
    if current_user.has_role? :admin 
     redirect_to '/restaurants#index' 
    else 
     redirect_to 'http://www.google.com' 
    end 
    end 

我沒有在一開始的前綴,因爲這就是我在我的定義我的根routes.rbroot :to => 'restaurants#index'

+0

您也可以使用[資源路線](http://guides.rubyonrails.org/routing.html)來改進你的例子 – JJD 2012-11-28 12:27:49

+3

這個答案對初學者來說可能是非常具有誤導性的,你在這裏做的是用'index'錨點重定向到'/ restaurants'路徑。 routes.rb文件中的語法與訪問控制器中路由的方式不同,請將第一個重定向改爲restaurants_path並更正解釋。 – mdrozdziel 2013-09-22 11:09:56

0

它似乎可以使用渲染來做到這一點,而不是使用路由或重定向。

def index 
    if current_user.has_role? :admin 
     render "admin" # where admin.html.erb is in the same folder as index.html.erb 
    else 
     # do nothing - render default view 
    end 
end 
相關問題