渲染部分布局不显示任何内容

时间:2011-11-24 10:20:14

标签: ruby-on-rails ruby ruby-on-rails-3.1

我正在寻找的效果是为html框实现可重用的组件。我发现人们似乎使用类似下面的例子,但它不适合我。 我有:

# app/views/home/index.html.erb
top
<% render :layout => 'layouts/box' do %>
  <p>Here is some content</p>
<% end %>
bottom

# app/views/layouts/_box.html.erb
inside box
<%= yield %>

我在浏览器上呈现的最终结果是:

top bottom

不过,我可以在日志中看到:

Processing by HomeController#index as HTML
Rendered layouts/_box.html.erb (0.1ms)
Rendered home/index.html.erb within layouts/application (1.2ms)

所以盒子布局正在处理中。它只是没有显示任何东西。 有什么想法吗?

我正在使用Rails 3.1.3和Ruby 1.9.2-p290。

3 个答案:

答案 0 :(得分:2)

<% @Var %>

隐藏内容

<%= @var %>

显示内容

所以它可能是:

<%= render :layout => 'layouts/box' do %>
  <p>Here is some content</p>
<% end %>

你需要什么。

答案 1 :(得分:2)

您忘记输出“渲染”电话了:

<%= render ... %>

而不是

<% render ... %>

答案 2 :(得分:0)

也许你混淆了通过content_for:

渲染部分内容和产生内容

渲染部分:

# app/views/home/index.html.erb
top
<%= render 'layouts/box' %>
bottom

# app/views/layouts/_box.html.erb
Here is some content inside the box

# result:
top
Here is some content inside the box
bottom

通过content_for:

产生内容
# app/views/home/index.html.erb
top
<% content_for :box do %>
Some content
<% end %>
bottom

# app/views/layouts/application.html.erb
<%= yield :box %>
<%= yield %>

# result
Some content
top
bottom

你可以这样做:

# app/views/home/index.html.erb
top
<p>Here is some content</p>
<%= render 'layouts/box' %>
bottom

# app/layouts/_box.html.erb
inside box

通常,布局文件夹用于布局(容器)。如果您需要在不同控制器中使用部分控制器,请将其放在app / views / shared / _your_partial.html.erb中。

此处有更多信息: for yield和content_for:http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

对于部分: http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials