Перенаправление не работает после загрузки файла

Ниже мой код шоу в контроллере:

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 = @archive.eula, У этого eula есть 2 кнопки "Принять" и "Отклонить". Если пользователь нажимает "отклонить", мы просто возвращаемся на страницу загрузки. Если пользователь нажмет "Принять", мы загрузим файл для пользователя. Но даже после загрузки файла страница не возвращается обратно на страницу загрузки. Страница Eula по-прежнему отображается для пользователя. Если я положу redirect_to archives_url and return после send_archiveвыдает ошибку:

Render и / или Redirect были вызваны несколько раз в этом действии. Пожалуйста, обратите внимание, что вы можете вызывать только рендер или переадресацию, и не более одного раза за действие

Пожалуйста, помогите мне решить эту проблему.

1 ответ

Создал файл 'eula.js' в расположении: app / assets / javascripts. Eula.js содержит следующий код:

    var interval = null;
$(document).ready(function() {
    function myFunction(){
        if(window.location.href === "http://www.yoursite.com")
        {
            clearInterval(interval);
        }
        else {
            window.location.href = "http://www.yoursite.com";
        }
    }

    $('#Accept').click(function (event) {
        interval = setTimeout(myFunction, 5000);
        event.preventDefault();
    });
});

В show.html.erb нужно добавить :id => "Accept" так что JS может распознать нажатие кнопки. Теперь, когда пользователь нажимает кнопку "Принять", для него начинается загрузка, и через 5 секунд после нажатия страница перенаправляется в указанное вами место. Этот кусок кода работает нормально для меня.

Другие вопросы по тегам