jyoseph
jyoseph

Reputation: 5455

Ruby on Rails - How to manage layouts in admin interface?

I have a very simple site setup using awesome_nested_set and a single table called Pages.

I would like the ability to select different layouts in the admin when creating and updating Pages. What I envisioned is a drop down on the Pages form that allowed me to select a layout/template.

The only thing I know about layouts is you are required to add them to /views/layouts/ and specify the layout at the top of the controller. I need a way to manage layouts on a per Page basis inside the app itself.

Is that even possible? If so, can you explain on a high level how that might be done so I can have a starting point?

edit

Something like this:
alt text

Upvotes: 1

Views: 921

Answers (2)

Todd
Todd

Reputation: 3508

Assuming you have files in views/layouts called something like one_column.html.erb, two_column.html.erb, etc., and an attribute called layout on you page model, you could just do:

def show
  @page = Page.find(params[:id])
  render :action => "show", :layout => @page.layout
end

Is that what you're looking for?

Upvotes: 1

Keith Gaddis
Keith Gaddis

Reputation: 4113

You can easily change the layout at render by supplying the :layout key like so:

def some_action
   #... stuff
   render "some_action", :layout => "custom_layout"
end

You can also set layout to a symbol in the controller definition, and the controller will run the associated method to decide what layout to choose

class UsersController < ApplicationController
  layout :decide_layout

  private
    def decide_layout
       some_boolean ? "layout1" : "layout2"
    end
end

You can also replace the symbol with a proc if you don't want the method located away from the usage. Finally, you can also call #layout in an action itself.

Upvotes: 4

Related Questions