为什么Rails使布局选择成为控制器问题而不是视图问题?我可以从视图中选择布局吗?

d11*_*wtq 12 layout ruby-on-rails

也许有一个技术/实现的原因,但在我看来,"布局"显然是视图层的一部分,但Rails似乎只允许在控制器级别指定布局.

我的控制器不应该关心布局......模板应该.有没有办法在.erb文件中指定要使用的布局?

就像是:

<%= with_layout :news_feed do %>

  <p>
    My markup in here.
  </p>

<% end %>
Run Code Online (Sandbox Code Playgroud)

或者你能想到的任何其他实现......但是文档似乎只是从控制器的角度来看布局.

也许实现一个with_layout帮助器并不太难.

编辑| 我找到了我正在寻找的东西:

<% render :layout => "some_layout" do %>
  <p>
    My markup here
  </p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

现在提供的ActionController具有:

class ApplicationController < ActionController::Base
  layout nil
Run Code Online (Sandbox Code Playgroud)

然后,每个模板都可以使用这种方法选择自己的布局.

如果在app/layouts中放置一个名称与控制器匹配的布局,那么将使用该布局,因此您不必严格指定它们是否完全相同.无论哪种方式,花花公子如何编写你的模板现在可以完全控制它,而不是那个正在编写控制器的家伙:)

McS*_*tch 3

我做了一些研究,但没有找到与您正在寻找的类似的解决方案。

我认为这可能与以下事实有关:可以通过your_controllers_name.html.erbapp/views/layouts. 如果特定控制器始终使用相同的布局,这可能会从控制器中删除任何逻辑。也许这就是您正在寻找的?如果布局没有匹配的控制器名称,则将application.html.erb使用默认值。

如果您需要有条件地渲染不同的布局,那么确实需要在控制器中做出该决定。否则你就会把决策逻辑强加到你的观点中。您的视图不必决定它需要什么布局,因为控制器可以做出决定并设置视图所需的任何必要数据。