0

我知道这是一个坏主意,但从我在 ApplicationControllers 中看到的情况来看,使用:

render :layout => "something" ...

应该使用位于的布局进行渲染views/layouts/something.html.erb

但是,当我从视图内部进行此调用时,它会出错:

Missing partial my_controller_name/something with ... 
Searched in:
* "{path here}/app/views"

在我看来,它正在寻找一个部分,而不是我指定的布局。有谁知道这是怎么回事?

一个足够小的例子来重现它:

<%= render :layout => 'something' do %>
  <div>Hello</div>
<% end %>

这都是在 Rails vs 4.0.2 下

4

1 回答 1

0

render在控制器中的工作方式与在视图中的工作方式不同。在控制器中,它主要用于渲染动作模板,而在视图中,它主要用于渲染部分模板。当你想为一个动作渲染一个特定的布局时,你有几个选项,但它们都在控制器中。

如果您希望特定控制器中的每个操作都使用该布局,您可以layout 'something'在该控制器中指定(通常靠近顶部)或为 a ApplesController,您可以在其中创建一个新布局app/views/layouts/apples.html.erb,这将自动用作默认布局ApplesController.

如果您只希望控制器中的单个动作使用该布局,则可以使用render layout: 'something'控制器动作的内部,其中要呈现的动作暗示为当前动作。

Rails 文档中的链接:

于 2014-11-10T00:22:45.387 回答