gpt4 book ai didi

ruby-on-rails - 每个模块的不同部分 View

转载 作者:行者123 更新时间:2023-12-03 08:29:41 24 4
gpt4 key购买 nike

我有不同的命名空间 Controller ,它们共享相同的布局:

# /app/controllers/admin/dashboard.rb
class Admins::DashboardController < ApplicationController
...
end
# /app/controllers/clients/dashboard.rb
class Clients::DashboardController < ApplicationController
...
end

这是我的目录结构:
App
|_ Controllers
| |_ Admins
| | |_ dashboard_controller.rb
| |_ Clients
| |_ dashboard_controller.rb
|
|_ Views
|_ Admins
| |_ Dashboard
| |_ index.html.erb
|
| |_ show.html.erb
|_ Clients
| |_ Dashboard
| |_ index.html.erb
| |_ show.html.erb
|_ layouts
|_ admin.html.erb
|_ _sidebar.html.erb

我想确定布局是否显示为 AdminsClients所以我可以显示正确的侧边栏,比如:
<% if admins? %>
...
<% elsif clients? %>
...
<% end %>

这甚至是解决此问题的最佳方法还是有更好的解决方案?

最佳答案

您可以使用模板继承来实现这一点。只需render 'sidebar'在您想要重用的布局中,并在以下位置定义您的 _sidebar 模板:

app/views/admins/dashboard/_sidebar.html.erb  # for Admins::DashboardController
app/views/clients/dashboard/_sidebar.html.erb # for Clients::DashboardController
app/views/application/_sidebar.html.erb # fallback sidebar

由于模板继承,Rails 会自动为您选择右侧边栏。

如果您也想在其他 Admin/Client Controller 中使用相应的侧边栏,您还可以为每个 Controller 设置一个 BaseController,如下所示:
class Admins::BaseController < ApplicationController

end

class Admins::DashboardController < Admins::BaseController
...
end

现在有一个 _sidebar.html.erb app/views/admins/base/ 中的模板并确保 Admins 命名空间中的每个 Controller 都继承自 Admins::BaseController。

您将看到这为您的所有命名空间 Controller 提供了一种非常好的方式来构建通用功能/回调等。此外,它还可以让您在需要时覆盖侧边栏部分,只需放置 _sidebar.html.erb任何更具体的 View 路径中的文件,例如 app/views/admins/myspecificsidebars/_sidebar.html.erb .

关于ruby-on-rails - 每个模块的不同部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541672/

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