Forum: Ruby on Rails ActionView: render a layout not in app/views?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
E60b2dc57668b5662ce3f07781e41710?d=identicon&s=25 Matthew Rudy Jacobs (matthewrudy)
on 2008-10-14 23:25
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
6fabb84e727dee98d1277df56458cbac?d=identicon&s=25 Andrew Bloom (Guest)
on 2008-10-15 01:37
(Received via mailing list)
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?

On Oct 14, 4:25 pm, Matthew Rudy Jacobs <rails-mailing-l...@andreas-
E60b2dc57668b5662ce3f07781e41710?d=identicon&s=25 Matthew Rudy Jacobs (matthewrudy)
on 2008-10-15 11:41
Andrew Bloom wrote:
> 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?
>
> On Oct 14, 4:25�pm, Matthew 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.
E60b2dc57668b5662ce3f07781e41710?d=identicon&s=25 Matthew Rudy Jacobs (matthewrudy)
on 2008-10-15 22:19
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-layout...
This topic is locked and can not be replied to.