Why is Rails looking for a template while I have told it to render a specific file? This worked under Rails 2. I read http://www.engineyard.com/blog/2010/render-options-in-rails-3/ which from I gather makes any format.xxx look for a template xxx which is not what I need to do as the file is created dynamically:
In my controller:
pdf_file_path = "./directory/file_name.pdf" # just an example, assume this file exists
respond_to do |format|
format.pdf { render :file => pdf_file_path }
end
But I get:
ActionView::MissingTemplate (Missing template comparisons/display with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:pdf], :locale=>[:en, :en]} in view paths “/Users/DK/Documents/ror/projects/creditcompare3/app/views”):
Looks to me that instead of passing css filenames into the
"ActionController.add_renderer" block, you could just as easily pass
your actual dynamically generated PDF, and then have the "send_data"
call send your file.
But I agree, it's certainly easier the just "render :file => foo_bar"
- which I do in some of my controller actions, and I've not moved to
Rails3 yet, so I'll be interested in your result.
I think that you’re looking for either send_file or send_data depending on how you create the PDF. If there actually is a file, then send_file will be what you want. If you still have the data in memory, then send_data(stuff) is similar to render(:text => stuff)
But I agree, it’s certainly easier the just “render :file => foo_bar”
Right. I know there must be a good reason for a lot of these changes and at some point it will all come together the ponies and rainbows will appear. I am waiting semi-patiently for this moment