【发布时间】:2014-10-07 13:29:34
【问题描述】:
通常推荐的解决方案是父布局文件中的content_for。但这导致必须在每个视图中指定它,因为如果内容不存在于子视图部分中,默认将不显示它。
例如,如果我有一个要隐藏在身份验证页面中的侧边栏,但在其他任何地方都有,我现在必须在除身份验证页面之外的每个视图文件中指定侧边栏的内容。不干燥。
这比以前更麻烦且不枯燥,我可以在布局中渲染侧边栏部分并完成它(但没有选择它在哪里渲染或不渲染的好处)。
如果您能以某种方式在布局模板中指定调用侧边栏部分为不招标,如果它是会话控制器或设计控制器,那就太好了。
有没有办法做到这一点?我试过使用
unless devise_controller?
render "layouts/sidebar"
但这似乎没有按预期工作。
以 Devise 为例,我有一个这样的 application.html.slim 文件
.row
main
.col-sm-9
= yield
- unless devise_controller?
.col-sm-3
== render 'layouts/sidebar'
暂时忽略这些列。要点是=yield 呈现普通模板以及设计模板。所以我不能在一个 DRY 笔划中选择性地禁用侧边栏。我必须将侧边栏渲染调用放在每个视图文件中,但不要将其包含在我的设计视图中。这并不比在每个非设计视图文件中使用 content_for 更好或更干燥。
回到列,我希望生成的设计视图全宽为 12 列,而不是 9 列。但这只是奖励,不是主要问题。
【问题讨论】:
-
你可以为认证页面设置一个特殊的布局,你不会呈现侧边栏,不是吗?
-
如果您指的是设计视图文件,我认为不是。我在 application.html 文件中有一个
=yield,它呈现设计视图模板。因此设计视图受制于其父级的样式。让我在 OP 中添加更多代码。 -
你能提供一些关于你在说什么的细节吗? @Sergio Tulentsev?我不知道它是哪个文件,也不知道你想到了什么设计模式。
-
我认为您可以继承设计控制器并指定自定义布局。
标签: ruby-on-rails view-templates