2010-01-25 8 views
5

Mis páginas web constan de dos partes, digamos arriba y abajo (excepto el encabezado y el pie de página, que son consistentes en todas las páginas). ¿Cuál es la mejor práctica para generar dinámicamente esas partes dependiendo de la acción?Diseños de rieles de dos partes

Un enfoque que he propuesto es tener vista para la parte superior y parcial para la parte inferior; en el rendimiento de llamada de disposición para la parte superior y el parcial de representación para la parte inferior. El nombre del parcial se sustituye dinámicamente según la acción.

No estoy seguro de que sea la mejor manera de hacerlo.

Respuesta

8

Creo que su idea está bien. En sus vistas puede hacer:

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

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

Por supuesto, debe comprobar si el parcial existe y proporcionar algún comportamiento predeterminado. Pero creo que estás enterado de eso de todos modos.

Y luego, en su diseño:

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

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

Disculpe, no leí su pregunta correctamente en primer lugar. Edité mi respuesta para que se relacionara más con tu pregunta. –

+0

Me gusta su enfoque, lo intentaré. Gracias. –

1

Aquí es una versión muy simplificada de un DSL vista que he utilizado en el pasado. Funcionó bien para nosotros En realidad, parametrizamos los métodos de ayuda para que pudiéramos elegir entre muchos parciales de diseño sobre la marcha (para tener páginas con barras laterales, columnas múltiples, etc.).

# 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 %> 
Cuestiones relacionadas