I don't know why I though the third method worked...anyway, a little
tweaking gives me this, which does work.  Instead of the content_for I
pass a rendered collection into _sublayout as a local variable named
content.

4)
layout.html.erb
<html>
  <head>head stuff</head>
  <body>
    some stuff
    <%= yield %>
    some stuff
  </body>
</html>


index.html.erb
<%= render :partial =>"sublayout", :locals => { :content =>
(render :partial => "item", :collection => @items) } -%>


_sublayout.html.erb
some stuff
<%= content %>
some stuff

_item.html.erb
<%= h item.name %>


On Oct 1, 1:04 pm, Garrett Berneche <[EMAIL PROTECTED]>
wrote:
> I have a nice layout for my app, but for some actions I want to use a
> shared sub layout.  Anyone have ideas what the best practice would
> be?  I have a method that works, but I am not sure if it is the 'rails
> way' of doing things, anyone care to critique it?  I have tried the
> following...
>
> 1) making my action template call
> render :partial, :collection, :layout.  The good new here is that it
> wraps the layout around the whole collection (not around each item in
> the collection) and doesn't blow away my main layout.  The bad news is
> the sub-layout and collection are repeated as many times as there are
> items in the collection.  This seems like a rails bug.  The layout
> should be applied once around the whole collection, or once for each
> item in the collection, not both.
>
> 2) applying a layout to the render :action in the controller.  This
> blows away my main layout.  This is because i am rendering a template,
> not a partial, right?
>
> 3) using content_for to define a sub-layout.  this works, but I feel
> like there should be an easier way.  i am also not sure yet what would
> happen when i don't want a sub-layout.  I guess I could make a
> _no_sub_layout.html.erb that just yields, or put the content all
> inside of the content_for block...I have a few other ideas too.  One
> possible benefit is that I think you could keep nesting sub-layouts
> pretty easily if you wanted.  Here is a simplified version of this
> solution.
>
> layout.html.erb
> <html>
> <head>head stuff</head>
> <body>
>   some stuff
>   <%= yield :sublayout %>
>   some stuff
> </body>
> </html>
>
> index.html.erb
> <% content_for :sublayout do -%>
>   <%= render :partial =>"sublayout" %>
> <% end -%>
>
> <% for item in @collection do -%>
>   <%= render :partial => "item" -%>
> <% end -%>
>
> _sublayout.html.erb
> some stuff
> <%= yield %>
> some stuff
>
> _item.html.erb
> <%= h item.name %>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to