是否可以使用部分在Rails中呈现为包装?

时间:2011-01-15 20:10:58

标签: ruby-on-rails-3 view rendering partial-views

我想渲染这样的结构:

<tag1>
  <tag2 someattribute="somevalue">
    <.. lot of things inside ..>
  </tag2>
</tag1>

<tag1>
  <tag2 someattribute="someothervalue">
    <.. different inside things inside ..>
  </tag2>
</tag1>

tag1,tag2是相同的,它们只是参数化的。代码的内部部分发生了变化。我尝试像那样(haml)实现上面的东西:

%div{id:['products', id]}
  .products_content
    %div{id:['products', id, 'content'], class:'products_mask'}
      = yield

这是部分_content_head.html.haml,它是从模板中调用的:

= render 'shared/content_head', id: 'all' do
  %h3= Title
  %p= Body of the text.

我的理论是,部分内部的收益会导致渲染传递的块并没有证明。有没有办法将partials用作代码包装器?你能给我一些解决方案吗?谢谢。

2 个答案:

答案 0 :(得分:2)

这可能是capture方法的好用。

我只熟悉ERB,但这是一般性的想法:

<% structure = capture do %>
  <h3>Title</h3>
  <p>Body of text</p>
<% end %>

然后将变量传递给partial:

<%= render 'shared/content_head', :structure => structure %>

在部分内部,吐出structure变量:

<%= structure %>

在渲染部分内容时,在视图中多次重置structure(或者更合适的是,在帮助器中?)。

答案 1 :(得分:0)

我使用了以下内容(Rails 4,但我认为它也适用于Rails 3):

compatibility-v7-appcompat

<%# app/views/users/_edit.html.erb %>
<%= render layout: 'modal_wrapping' do |f| %>
  <%= f.input :email %>
  ...
<% end %>