Use rubyzip to download paperclip attachments within nested model
I have the following model setup: assignments belong to a user and have
many submissions submissions belong to users and also belong to
assignments submissions have attached files (using paperclip).
I want the assignment user (creator) to be able to download the files
associated with all the submissions that belong to the particular
assignment.
My routes are structured as follows:
resources :assignments do
resources :submissions
end
I need to define a download action in my assignments controller, which
creates a zip archive of all the submissions belonging to an assignment
and then redirects directly to that file url for a download.
def download
@submissions = @assignment.submissions.all
input_filenames = @assignment.submissions.all
Zip::File.open(assignment.file.url+"/archive.zip", Zip::File::CREATE)
do |zipfile|
input_filenames.each do |filename|
zipfile.add(@submission.file_file_name,
assignment_submission_file_path(@assignment.id, @submission.id)+
'/' + @submission.file_file_name)
end
end
respond_to do |format|
format.html { redirect_to assignment.file.url }
format.json { head :no_content }
end
end
Then in my assignment show page, I have the following:
<%= link_to 'Download', @assignment.file.url(:original, false) %>
But when clicked I get an error returning that the file is missing:
No route matches [GET] "/files/original/missing.png"
So the zip archive file is not being created, and thus my routing to the
file doesn't work. It's possible I've done something wrong that is very
basic, or that the wrong thing needs to be structured differently.
Or my other thought was: do I need to create an empty zip archive in the
create action of the assignment controller, so that there is an empty zip
archive with a viable path to refer to when I want to add stuff into it?
If so, how can I do that with the rubyzip gem?
Thanks!
No comments:
Post a Comment