ActionView: render a layout not in app/views?

Hey there, I have a problem.

class ApplicationController   layout :determine_layout

  def determine_layout     "../../public/sites/#{@site.code}/application"   end end

in rails2.0 this worked, but it was clearly a hack.

I tried to fix it in a few ways;

1. symlink public/sites -> app/views/layouts/sites - this breaks because the Dir.glob used to find view files doesnt work for subfolders of a symlink

2. set ApplicationController.view_paths << "public/sites" - this doesnt quite seem to work.

3. manually fix rails and work out the best way to patch it for 2.2.1 - this seemed to work, but isn't quite plugin-able as a fix

mostly I'm wondering, what is the right way to do this?

MatthewRudy

Quite often I'm tasked with doing something very similar. Check out my solution:

class ExperiencesController < ApplicationController   self.view_paths << File.join(RAILS_ROOT, "cms", "experiences")

  def show     render :layout => "1/layout"   end end

requiring a folder structure like: RAILS_ROOT/   app/   cms/     experiences/       1/         layout.html.erb   config/   ...

Does that help?

Matthew Rudy Jacobs wrote: tthew Rudy Jacobs <rails-mailing-l...@andreas-

Hey thanks andrew, that's the same thing I'm trying to achieve, although the code as such won't quite work in Rails 2.1.1

it'll give you errors about "found a view path that is not in the right format"

the correct way is   append_view_path(...)

and you pointed out my error

I was doing;   append_view_path("public/sites")

while actually what is required;   append_view_path(File.join(Rails.root, "public", "sites"))

works great, it seems. Thanks.

Wrote a quick blog post about this; http://rudygems.com/post/54730156/rendering-layouts-that-live-in-public