28

I want to be able to get Sinatra views from sub-directories of ./views (such as ./views/admin). I know you can set the views like so:

set :views, Proc.new { File.join(root, "templates") }

But how would I be able to set this for only part of the file?

Ethan Turkeltaub
  • 2,931
  • 8
  • 30
  • 45

2 Answers2

69

I'm not sure exactly what you're asking, but you can render a view in views/admin by doing this:

erb :"admin/report"

If you're asking how to automatically look in subdirectories of views when you call erb :report, I'm not sure how to do that, and I don't think you'd want to (what happens if two views in different dirs have the same name?).

Alex Reisner
  • 29,124
  • 6
  • 56
  • 53
2

This is supposed to be an oversized comment. The answer provided by Alex is the correct one, but to be sure, this is a quote from official documentation:

One important thing to remember is that you always have to reference templates with symbols, even if they’re in a subdirectory (in this case, use: :'subdir/template' or 'subdir/template'.to_sym). You must use a symbol because otherwise rendering methods will render any strings passed to them directly.

Franklin Yu
  • 8,920
  • 6
  • 43
  • 57