渲染部分布局通过两个块

时间:2013-10-15 17:57:20

标签: ruby-on-rails ruby ruby-on-rails-3 partials

我有一个页面,我需要在不同时间呈现一段html代码,这些代码总是具有相同的结构但内容不同。 我想在布局中提取结构并制作不同的部分,使用相同的布局渲染它们。

主页

<body>
  <%= render partial: 'a', :layout => "layouts/card"%>
  <%= render partial: 'b', :layout => "layouts/card"%>
  <%= render partial: 'c', :layout => "layouts/card"%>
</body>

布局'布局/卡'就是这样:

<div class="slide red">   
 <div class="row full-width">
    <div class="large-3 columns">
      <%= yield :content_a %>
    </div>
 </div>
 <div class="large-9 columns">
    <%= yield :content_b%>
 </div>
</div>

部分'a'是这样的:

<% content_for :content_a do %>
 <div>
  <div>
   Hello A
  </div>
    Hello A2
 </div>
<%end%>
<% content_for :content_b do %>
 <div>
  <div>
   Hello B
  </div>
    Hello B2
 </div>
 <img src="..."/>
<%end%>

部分b对于两者都有不同的内容,并且变量很大,因此我无法传递数千个参数

但是并没有真正起作用并且在两个yield文件中没有内容的情况下呈现布局。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为布局上的yield语句首先在content_for之前获取进程。在这种情况下,产量将被替换为零。我不确定是否有解决方案。

如果您将逻辑更改为类似下面的内容,因为您只是试图干掉代码并且实际上不是布局,那该怎么办:

_a.html.erb

<div class="slide red">   
 <div class="row full-width">
    <div class="large-3 columns">
      <%= content_a%>
    </div>
 </div>
 <div class="large-9 columns">
    <%= content_b%>
 </div>
</div>

主页

<body>
  <%= render partial: 'a', :locals => {:content_a => "Hello A", :content_b => "Hello B"}%>
  <%= render partial: 'a', :locals => {:content_a => "Hello C", :content_b => "Hello D"}%>
  <%= render partial: 'a', :locals => {:content_a => "Hello E", :content_b => "Hello F"}%>
</body>

答案 1 :(得分:0)

试试这个: -

 <%= render partial: 'a', :layout => "layouts/card"%>