也许有技术/实现的原因,但在我看来,“布局”显然是视图层的一部分,但Rails似乎只允许在控制器级别指定布局。
我的控制器不应该关心布局......模板应该。有没有办法在.erb文件中指定要使用的布局?
类似的东西:
<%= with_layout :news_feed do %>
<p>
My markup in here.
</p>
<% end %>
或者你能想到的任何其他实现......但是文档似乎只是从控制器的角度来看布局。
实现with_layout
帮助器可能不会太难。
编辑|我找到了我正在寻找的东西:
<% render :layout => "some_layout" do %>
<p>
My markup here
</p>
<% end %>
现在提供的ActionController包含:
class ApplicationController < ActionController::Base
layout nil
然后,每个模板都可以使用这种方法选择自己的布局。
如果您在app / layouts中放置一个名称与控制器匹配的布局,那么将使用该布局,因此您不必严格指定它们是否完全相同。无论哪种方式,花花公子如何编写模板现在可以完全控制它,而不是编写控制器的家伙:)
答案 0 :(得分:3)
我做了一些研究,但没有找到任何类似于你正在寻找的解决方案。
我认为这可能与指定非默认布局的事实有关,可以通过在your_controllers_name.html.erb
下命名文件app/views/layouts
来完成。如果始终为特定控制器使用相同的布局,则可以从控制器中删除任何逻辑。也许这就是你要找的东西?如果您没有匹配的布局控制器名称,则将使用默认的application.html.erb
。
如果需要有条件地渲染不同的布局,则需要在控制器中做出该决定。否则,你会将决策逻辑推到你的视野中。您的视图不应该决定它需要什么样的布局,因为控制器可以做出决策并设置视图所需的任何必要数据。
答案 1 :(得分:1)
一些陈述:
布局与渲染有关 布局只能调用一次 视图 - 是渲染的最高(最后)级别 控制器 - 是第一级渲染层。
所以我可以说只有我们可以设置布局的地方 - 才是控制器。如果我们可以从视图设置布局,那么我们将遇到嵌套布局的问题,因为每个视图(部分也是如此)将调用它自己的布局。
控制器布局如何简单明了。如果我们从孩子们那里设置父级别的观点,那就不清楚了。
你在说什么 - 屈服(content_for
)和偏见(render :partial
)。它是很好的工具,它们非常完美。