我正在寻找的效果是为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。
答案 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