I have a client Rails project, and I'd like to create a folder outside
of the Rails app completely. The client could create vanilla HTML
files and drop them into the folder. I'd then like to render those
HTML files as partials against the main site template. I want to keep
the client as far from the actual Rails app as possible. Is there a
way for me to render partials from outside the Rails root? Or at least
outside views?
I'm using render :file, but as far as I can tell, Rails still tacks
RAILS_ROOT/app/views to the beginning of the given filename. Is there
a way to disable this? Ideally, I'd be rendering the partial from
outside the Rails root entirely.
File rendering works just like action rendering except that it takes a
filesystem path. By default, the path is assumed to be absolute, and
the current layout is not applied.
# Renders the template located at the absolute filesystem path
render :file => "/path/to/some/template.erb"
render :file => "c:/path/to/some/template.erb"
# Renders a template within the current layout, and with a 404
status code
render :file => "/path/to/some/template.erb", :layout =>
true, :status => 404
render :file => "c:/path/to/some/template.erb", :layout =>
true, :status => 404
Based on that you should be able to use one of the 2 first samples and
modify it for your needs.
Thanks for the help on this. I figured out what my problem was.
render :partial works as advertised when used in a controller, but not
as a helper when used in a view (at least in Rails 2.0.2). The helper
version of render tries to tack the view path to the beginning of the
filepath no matter what. Instead, I used render_to_string form the
controller and used the string directly in the view. This may have
been fixed in a subsequent version of Rails.