通常推荐的解决方案是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 列。但这只是奖金,而不是主要问题。