2010-01-25 19 views
5

Web sayfalarım iki bölümden oluşuyor, diyelim ki üst ve alt (üstbilgi ve altbilgi hariç - sayfalar arasında tutarlı olanlar). Harekete bağlı olarak bu parçaları dinamik olarak üretmek için en iyi uygulama nedir?İki parçalı Raylar mizanpajları

Buraya geldiğim bir yaklaşım, alt kısım için üst ve kısmi görünüm sağlamaktır; En üst için düzen arama veriminde ve alt için kısmi render. Parçanın adı, eyleme bağlı olarak dinamik olarak ikame edilir.

Bunu yapmanın en iyi yolu olduğundan emin değilsiniz.

cevap

8

Fikrinizin iyi olduğunu düşünüyorum. görüşleriniz size yapabileceği: Elbette

<%- content_for :top do -%> 
    […] 
<%- end -%> 

<%- content_for :bottom do -%> 
    <%= render @partial_name %> 
<%- end -%> 

kısmi varoldukları için kontrol ve bazı varsayılan davranışı sağlamalıdır. Ama bence bunun farkındasın.

Sonra mizanpajınızda

: Burada

<div id="top"> 
    <%= yield :top %> 
</div> 

<div id="bottom"> 
    <%= yield :bottom %> 
</div> 
+0

Maalesef, sorunuzu ilk başta yeterince düzgün okumadım. Cevabımı düzenledim, bu yüzden size daha fazla soru sorulacaktı. –

+0

Yaklaşımını beğendim - bunu deneyeceğim. Teşekkürler. –

1

ben geçmişte kullandığınız bir görünüm DSL çok basitleştirilmiş bir sürümüdür. Bizim için iyi çalıştı. Gerçekte, yardımcı metodları parametreledik, böylece birçok düzeni kısmi olarak seçtik (yan çubukları olan sayfalar, çoklu sütunlar, vb.).

# app/views/shared/_screen.erb 
<div id="screen"> 
    <div class="screen_header"> 
<%= yield :screen_header %> 
    </div> 
    <div class="screen_body"> 
<%= yield :screen_body 
    </div> 
    <div class="bottom"> 
    <%= yield :footer %> 
    </div> 
</div> 

# app/helpers/screen_helper.rb 
module ScreenHelper 

def screen(&block) 
    yield block 
    concat(render :partial => 'shared/screen') 
end 

def screen_header 
    content_for :screen_header do 
    yield 
    end 
end 

def screen_body 
    content_for :screen_body do 
    yield 
    end 
end 

def footer 
    content_for :footer do 
    yield 
    end 
end 
end 

# app/views/layouts/application.erb 
# only showing the body tag 
<body> 
    <%= yield :layout 
<body> 

# Example of a page 
# any of the sections below (except screen) may be used or omitted as needed. 
# app/views/users/index.html.erb 
<% screen do %> 
    <% screen_header do %> 
    Add all html and/or partial renders for the header here. 
    <%end%> 
    <% screen_body do %> 
    Add all html and/or partial renders for the main content here. 
    <% end %> 
    <% footer do %> 
Add all the html and/or partial renders for the footer content here. 
    <% end %> 
<% end %>