Today, I needed to do something that I didn’t find a handy method for in Rails. The API has both a send_data
and send_file
method, but they are both ‘one shot’ in that you have to send all your data at once.
def generate_file
@headers["Content-Type"] = "text/comma-separated-values;"
@headers["Content-Disposition"] = "filename="some.file.txt";"
i = 0
render :text => Proc.new { |response, output|
...
output.write("some generated text...")
...
}, :layout => false
end
I more or less copied that from the send_file
method, and indeed, I’ll even admit that I’m not entirely sure why it works. What I don’t get is what “connects” the output variable in the Proc to an actual file descriptor somewhere. render_text
doesn’t really clear things up (well, for me, at least!).
def render_text(text = nil, status = nil) #:nodoc:
@performed_render = true
@response.headers['Status'] = (status || DEFAULT_RENDER_STATUS_CODE).to_s
@response.body = text
end
In any case, the code does do what I want – perhaps someone else will find it useful.
NOTE
Comments are broken, as the typo journal system seems to have been somewhat abbandoned… argh!