通常推荐的解决方案是在父布局文件中的content_for
。但是这会导致必须在每个视图中指定它,因为如果内容不在子视图部分中,默认设置就不会显示它。例如,如果我有一个我想隐藏在认证页面中的边栏,但在其他地方都有,那么现在我必须在除认证页面以外的每个视图文件中指定边栏的内容。不干。更加干净的方式显示/隐藏轨道中的部分/模板
这比以前更麻烦,也不干燥,我可以在布局中渲染一个侧栏,并用它来完成(但没有选择它在哪里或不在哪里渲染的好处)。
如果您可以以某种方式在布局模板中指定如果它是会话控制器或设计控制器而调用侧栏部分不投标,那将会很好。
有没有办法做到这一点?我试过使用
unless devise_controller?
render "layouts/sidebar"
但是,这似乎没有按预期工作。
以与制定一个例子,我有像这样
.row
main
.col-sm-9
= yield
- unless devise_controller?
.col-sm-3
== render 'layouts/sidebar'
忽略列的一刻,application.html.slim文件。重点是=yield
呈现正常的模板以及设计模板。所以我不能在一次DRY中风中选择性地禁用边栏。我必须在每个视图文件中放置边栏呈现调用,但不要将其包含在我的设计视图中。这并不比在每个非设计视图文件中使用content_for更好或DRYer。
回到列,我想有12列,而不是9列产生的设计意见。但这只是奖金,而不是主要问题。
你可以有权威性的网页,你会不会使侧边栏,无特别的布局? – 2014-10-07 13:32:32
如果你指的是设计视图文件,我认为不是。我在application.html文件中有一个'= yield',它呈现了设计视图模板。所以设计意见受其父母的造型影响。让我在OP中增加一些代码。 – ahnbizcad 2014-10-07 13:35:47
你能为我提供一些具体细节吗? @Sergio Tulentsev?我不知道它是哪个文件,或者你有什么样的设计模式。 – ahnbizcad 2014-10-07 13:41:26