我正在为我的Rails应用使用Devise和CanCan/Rolify进行身份验证,但我不知道如何将Devise方法传递给命名空间控制器。我的应用有一个标准的“users”模型和控制器,这部分工作得很好。但是,如果具有特定角色(在注册后确定)的帐户使用主登录页面登录,我会将其重定向到命名空间视图和控制器。例如,用户ID为3的人登录并被重定向到0.0.0.0/external/dashboard,我可以在重定向后的dashboard页面上调用Devise的current_user方法,并返回正确的信息。然而,当我设置一个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)
路由
devise_for :users, controllers: { confirmations: 'confirmations', registrations: 'registrations' }
# External routes
namespace :external do
resources :properties, :clients, :orders, :deeds, :mortgages, :users, :owners, :dashboard
end
外部/仪表板视图
<%= 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方法
吗?提前致谢。