1

我使用設計慘慘/ Rolify一起爲我的Rails應用程序的認證,我有一個很難理解如何通過設計方法的命名空間控制器。未定義的局部變量或方法「CURRENT_USER」的命名空間控制器

我使用標準users模型和控制器爲我的應用程序的主要部分,那邊的一切運作良好。但是,我已經設置了,如果具有特定role(在註冊後確定)的帳戶使用主登錄頁面登錄,它將把它們重定向到命名空間視圖和控制器。

讓我們說user_id: 3登錄並重定向到0.0.0.0/external/dashboard,重定向後,我可以調用設計的current_userdashboard頁方法,並返回正確的信息。然而,當我爲用戶設置的link_to能夠在0.0.0.0/external/users/3/edit我收到以下錯誤編輯他的個人資料:

Started GET "/external/users/3/edit" for 127.0.0.1 at 2017-08-31 21:40:59 -0400 

ActionController::RoutingError (undefined local variable or method `current_user' for External::UsersController:Class) 

routes

devise_for :users, controllers: { confirmations: 'confirmations', registrations: 'registrations' } 

# External routes 
namespace :external do 
    resources :properties, :clients, :orders, :deeds, :mortgages, :users, :owners, :dashboard 
end 

external/dashboard view

<%= user_name_helper(current_user) %> 

user_name_helper(產生用戶編輯鏈接),當我點擊這個幫手產生的鏈接

def user_name_helper(user) 
    if user.name.blank? 
    link_to "Update your profile here.", edit_external_user_path(user) 
    else 
    "Hello, #{user.name}" 
    end 
end 

錯誤發生。

但是<%= link_to fa_icon("sign-out", text: "Logout"), destroy_user_session_path, method: :delete %>0.0.0.0/external/dashboard正常工作。

所以我很困惑,爲什麼我可以在External::DashboardController的視圖內調用current_user,但不能在External::UsersController內調用它。所有名稱空間控制器都直接從ApplicationController繼承,我想只保留一個單獨的users model。我已經搜索了一堆不同的文章,但似乎無法找到類似於我的配置的答案,所以任何人都可以向我解釋我可能會做錯什麼,以及如何讓這個工作以及讓我能夠在我的命名空間視圖中使用任何其他Devise methods?提前致謝。

回答

0

韋爾普,我想通了。問題是,我在呼喚我external/控制器條件before_filter如下:

before_filter :client_only unless current_user.has_role? :admin 

一旦我刪除一切工作按預期。我仍然有以下before_filter工作。

before_filter :client_only 

... 

private 

def client_only 
    redirect_to root_path unless current_user.is_client? 
end 

不完全知道爲什麼有條件的過濾器將不能正常工作我本來的方式,所以如果任何人有任何見解,感覺就像共享然後我洗耳恭聽,謝謝。

相關問題