2011-01-15 3 views
0

나는이 같은 구조를 렌더링하는 싶습니다Parts를 사용하여 레일스에서 ​​래퍼로 렌더링 할 수 있습니까?

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

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

이 tag1, tag2로이 같은, 그들은 단지 매개 변수화된다. 코드의 내부 부분이 변경됩니다. 나는 그런 위의 것 (HAML)를 구현하려고 :

이 템플릿에서 호출되는 부분 _content_head.html.haml이었다
%div{id:['products', id]} 
    .products_content 
    %div{id:['products', id, 'content'], class:'products_mask'} 
     = yield 

:

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

내 이론은 그 내부 수익률 부분적으로 전달 된 블록의 렌더링이 증명되지 않았다. 코드 래퍼로 partial을 사용하는 방법이 있습니까? 이 문제를 해결할 방법을 제안 해 주시겠습니까? 고맙습니다.

답변

2

이 방법은 capture 방법을 사용하는 것이 좋습니다.

내가 ERB 만 알고 있어요,하지만 여기에 일반적인 생각입니다 :

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

는 그런 부분에 변수를 전달 :

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

그리고 부분에서을의 structure을 뱉어 변수 :

<%= structure %>

재설정 structure 내에서 여러 번 부분을 ​​렌더링 할 때보기 (또는 더 적절하게 도우미에서?).

+0

캡쳐 인라인을 사용하여 캡쳐를 먼저 수행 한 다음 나중에 부분을 호출하는 것과는 대조적으로 발견했습니다. 좀 더 읽기 쉽습니다. 예 : 필요에 따라 더 많은 부분을 포함하여 {% = render 'mypartial', : 구조 => 캡처 {%> 부분 부분의 내부 내용, myvar = <%= myvar %> ... <% } %>' – Yetanotherjosh

0

나는 다음 (레일 4,하지만 난 너무 레일 3 일을해야한다고 생각)을 사용했습니다

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

합니다.

관련 문제