gpt4 book ai didi

ruby-on-rails - 从 Rails 中不同命名空间中的另一个 Controller 重定向/调用方法

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:52 27 4
gpt4 key购买 nike

我有一个非常典型的情况,我有一个 '/dashboard',它应该为不同的用户角色(即客户端、管理员等)呈现不同的 View 。

我愿意接受更优雅的建议,但我的想法是为仪表板定义一个路由,如下所示:

routes.rb

resource :dashboard

并拥有一个像这样的dashboards_controller.rb:

class DashboardsController < ApplicationController
def show
if current_user.has_role?('sysadmin')
// show system admin dashboard
elsif
// show a different dashboard

// etc
end
end
end

现在我希望每个仪表板都构建在其角色特定的命名空间 dashboard_controller 中,例如:controllers/admin/dashboard_controller.rb。这样,每个仪表板都可以在正确的位置适本地构建。

我尝试这样做的方式是从我的主 dashboards_controller 重定向到 admin/dashboard_controller,如下所示:

redirect_to :controller => 'admin/dashboard_controller', :action => 'index'

但它不起作用,大概是因为我不确定如何从此处引用命名空间 Controller 。

我怎样才能做到这一点?

(如果有更优雅的解决方案我持开放态度,但我认为这非常好)。

我正在使用 devise 和 cancancan。

最佳答案

你可以做每个角色的仪表板,例如:

routes.rb

scope '/:role' do
resources :dashboard
end

resources :dashboard

然后用角色重定向,就这么简单:

redirect_to :controller => 'dashboard', :action => 'index', :role => 'admin'

更好的方法

如果你想为每个 Controller 自定义调度,你应该考虑使用过滤器。例如。给定 admin/dashboard 只能由 admin 访问,user/dashboard 只能由默认用户访问,您可能希望创建这样的文件:

routes.rb

namespace 'admin' do
resources :dashboard
end

namespace 'user' do
resources :dashboard
end

然后创建这些文件:

app/controllers/admin/dashboards_controller.rb
app/controllers/admin/admin_base_controller.rb
app/controllers/user/dashboards_controller.rb
app/controllers/user/user_base_controller.rb

对于每个文件:

# app/controllers/admin/dashboards_controller.rb
class Admin::DashboardsController < Admin::AdminBaseController; end

# app/controllers/admin/admin_base_controller.rb
class Admin::AdminBaseController < ApplicationController
before_action :ensure_admin!

def ensure_admin!
redirect_to controller: 'user/dashboards', action: index unless current_user.has_role?('sysadmin')
end
end

# Now you've got the idea. Similar things for the rest of the files:
# app/controllers/user/dashboards_controller.rb
# app/controllers/user/user_base_controller.rb

然后你可以尝试在 admin/dashboardsuser/dashboards 访问它,它应该被相应地重定向到它的角色。

关于ruby-on-rails - 从 Rails 中不同命名空间中的另一个 Controller 重定向/调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com