次のモデル設定があります: 割り当てはユーザーに属し、割り当てには多くの送信があります
提出物はユーザーに属し、課題にも属します
提出物にはファイルが添付されています (ペーパークリップを使用)。
課題のユーザー (作成者) が、特定の課題に属するファイル (提出物) をダウンロードできるようにしたいと考えています。
私のルートは次のように構成されています。
resources :assignments do
resources :submissions
end
したがって、割り当てコントローラーでダウンロード アクションを定義する必要があると思います。これにより、割り当てに属するすべての提出物の zip アーカイブが作成され、ダウンロードのためにそのファイル URL に直接リダイレクトされます。
def download
@submissions = @assignment.submissions.all
input_filenames = @submissions.file_file_name.all
Zip::File.open(assignment.file.url+"/archive.zip", Zip::File::CREATE) do |zipfile|
input_filenames.each do |filename|
zipfile.add(filename, assignment_submission_file_path(@assignment.id, @submission.id)+ '/' + filename)
end
end
respond_to do |format|
format.html { redirect_to assignment.file.url }
format.json { head :no_content }
end
end
次に、私の割り当てショーページには、次のものがあります。
<%= link_to 'Download', @assignment.file.url(:original, false) %>
しかし、クリックすると、ファイルが見つからないというエラーが表示されます。
No route matches [GET] "/files/original/missing.png"
そのため、zip アーカイブ ファイルが作成されていないため、ファイルへのルーティングが機能しません。非常に基本的な何か間違ったことをしたか、全体を別の方法で構成する必要がある可能性があります。
または、私の他の考えは、割り当てコントローラーの作成アクションで空のzipアーカイブを作成する必要がありますか? もしそうなら、どうすれば rubyzip gem でそれを行うことができますか?
ありがとう!