Ниже мое шоу-код в контроллере:Перенаправление не работает после загрузки файла
def show
@archive = Archive.find(params[:id])
if @archive.eula.blank? || params[:eula] == "1"
send_archive(@archive) and return
# redirect_to archives_url and return
else
@eula = @archive.eula
render
end
end
def send_archive(archive)
head(:x_accel_redirect => archive.download.url, :content_type => archive.download.content_type, :content_disposition => "attachment; filename=#{archive.download.original_filename}")
end
Для каждой загрузки, я отображая соглашение EULA к пользователю @eula = @archive.eula
. У этой eula есть две кнопки «Принять» и «Отклонить». Если пользователь нажимает «снижение», мы просто возвращаемся к странице загрузки. Если пользователь нажимает «Принять», мы загрузим файл для пользователя. Но даже после загрузки файла страница не возвращается на страницу загрузки. Страница Eula по-прежнему отображается пользователю. Если я поставил redirect_to archives_url and return
после send_archive
, он выдает ошибку:
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action...
Просьба помочь мне решить эту проблему.
Вы не можете отправить ответ перенаправления HTTP 3xx и файл в тот же ответ. Если вы хотите перенаправить пользователя после нажатия кнопки загрузки, вам нужно будет использовать javascript. – max
PS. вы можете использовать ['send_file'] (http://apidock.com/rails/ActionController/Streaming/send_file) – max
в простой форме, которую вы не можете обработать на стороне сервера. – Nithin