views:

72

answers:

1

I use a different layout for some actions (mostly for the new action in most of the controllers). I am wondering what the best way to specify the layout would be? (Consider like I am using 3 or more different layouts in the same controller)

I don't like using

render :layout => 'name'

that much. I did like doing

layout 'name', :only => [:new]

but it turns out I can't use that to specify 2 different layouts (e.g. if I call layout 2 times in the same controller, with different layout names and different only options, the first one gets ignored - those actions don't display in the layout i specified). I'm using Rails 2.

+2  A: 

You can use a method to set the layout.

class MyController < ApplicationController
  layout :resolve_layout

  # ...

  private

  def resolve_layout
    case action_name
    when "new", "create"
      "some_layout"
    when "index"
      "other_layout"
    else
      "application"
    end
  end
end
August Lilleaas